<!DOCTYPE html>
<html lang="zh-CN" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>常用工具库整理 | 烟浮YanFu</title>
    <meta name="description" content="收集个人使用过或遇到的 JavaScript 工具库">
    <link rel="preload stylesheet" href="/yanfu_notes/assets/style.e0cf71e9.css" as="style">
    <script type="module" src="/yanfu_notes/assets/app.71ca72fc.js"></script>
    <link rel="preload" href="/yanfu_notes/assets/inter-roman-latin.2ed14f66.woff2" as="font" type="font/woff2" crossorigin="">
  <link rel="modulepreload" href="/yanfu_notes/assets/chunks/framework.7af2bcd9.js">
  <link rel="modulepreload" href="/yanfu_notes/assets/chunks/theme.d5b8bac9.js">
  <link rel="modulepreload" href="/yanfu_notes/assets/workflow_utils_library.md.4c2486a6.lean.js">
  <meta name="theme-color" content="#3eaf7c">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <meta name="msapplication-TileColor" content="#000000">
  <meta name="baidu-site-verification" content="codeva-Whjnr38WFE">
  <meta name="msapplication-TileImage" content="/yanfu_notes/favicon.ico">
  <link rel="icon" href="/yanfu_notes/favicon.ico">
  <link rel="apple-touch-icon" href="/yanfu_notes/favicon.ico">
  <link rel="mask-icon" href="/yanfu_notes/favicon.ico" color="#3eaf7c">
  <link rel="manifest" href="/yanfu_notes/manifest.webmanifest">
  <script src="https://hm.baidu.com/hm.js?88ce1fd281010e3790b59a4e145bd8fc"></script>
  <script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
  </head>
  <body>
    <div id="app"><div class="Layout" data-v-b2cf3e0b><!--[--><!--]--><!--[--><span tabindex="-1" data-v-c8616af1></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-c8616af1> Skip to content </a><!--]--><!----><header class="VPNav" data-v-b2cf3e0b data-v-7e5bc4a5><div class="VPNavBar has-sidebar" data-v-7e5bc4a5 data-v-7c10cd25><div class="container" data-v-7c10cd25><div class="title" data-v-7c10cd25><div class="VPNavBarTitle has-sidebar" data-v-7c10cd25 data-v-4d981103><a class="title" href="/yanfu_notes/" data-v-4d981103><!--[--><!--]--><!--[--><img class="VPImage logo" src="/yanfu_notes/images/avatar.jpeg" alt data-v-6db2186b><!--]--><!--[-->烟浮YanFu<!--]--><!--[--><!--[--><!--[--><!--[--><img class="visitor" src="https://img.shields.io/static/v1?label=Version&amp;message=1.0.1&amp;color=00b079" onerror="this.style.display=&#39;none&#39;" data-v-9722d197><!--]--><!--]--><!--]--><!--]--></a></div></div><div class="content" data-v-7c10cd25><div class="curtain" data-v-7c10cd25></div><div class="content-body" data-v-7c10cd25><!--[--><!--]--><div class="VPNavBarSearch search" style="--vp-meta-key:&#39;Meta&#39;;" data-v-7c10cd25><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg class="DocSearch-Search-Icon" width="20" height="20" viewBox="0 0 20 20" aria-label="search icon"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">搜索文档</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-7c10cd25 data-v-7f418b0f><span id="main-nav-aria-label" class="visually-hidden" data-v-7f418b0f>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/yanfu_notes/nav" tabindex="0" data-v-7f418b0f data-v-5e623618 data-v-8f4dc553><!--[-->导航<!--]--><!----></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7f418b0f data-v-764effdf><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-764effdf><span class="text" data-v-764effdf><!----> 学习笔记 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-764effdf><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-764effdf><div class="VPMenu" data-v-764effdf data-v-e7ea1737><div class="items" data-v-e7ea1737><!--[--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/JavaScript/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->JavaScript 基础<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/JavaScript_top/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->JavaScript 高级<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/vue2/01/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->Vue2<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/vue3/01/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->Vue3<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/pinia/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->pinia<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/Nuxt3/01/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->Nuxt3<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/react/01/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->React<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/Next/01/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->Next<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/NodeLearn/01/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->Node<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/Dockers/01/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->Docker<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/web/wechatCloud/01/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->微信小程序<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7f418b0f data-v-764effdf><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-764effdf><span class="text" data-v-764effdf><!----> 日常笔记 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-764effdf><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-764effdf><div class="VPMenu" data-v-764effdf data-v-e7ea1737><div class="items" data-v-e7ea1737><!--[--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><p class="title" data-v-69e747b5>JavaScript 相关</p><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/dailyNotes/01/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->优雅的 JavaScript 单行代码<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/dailyNotes/01/learn02" data-v-2f2cfafc data-v-8f4dc553><!--[-->Array 下有多少原型方法<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/dailyNotes/01/learn03" data-v-2f2cfafc data-v-8f4dc553><!--[-->正则相关<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><p class="title" data-v-69e747b5>Vue 相关</p><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/dailyNotes/02/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->使用 defer 优化白屏时间<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><p class="title" data-v-69e747b5>css 相关</p><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/dailyNotes/03/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->loading<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/yanfu_notes/web/vue3/06/learn01" tabindex="0" data-v-7f418b0f data-v-5e623618 data-v-8f4dc553><!--[-->源码学习<!--]--><!----></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup active" data-v-7f418b0f data-v-764effdf><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-764effdf><span class="text" data-v-764effdf><!----> Workflow <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-764effdf><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-764effdf><div class="VPMenu" data-v-764effdf data-v-e7ea1737><div class="items" data-v-e7ea1737><!--[--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><p class="title" data-v-69e747b5>常用工具/方法</p><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link active" href="/yanfu_notes/workflow/utils/library" data-v-2f2cfafc data-v-8f4dc553><!--[-->工具库整理<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/utils/regexp" data-v-2f2cfafc data-v-8f4dc553><!--[-->常用正则整理<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/utils/function" data-v-2f2cfafc data-v-8f4dc553><!--[-->常用方法整理<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><p class="title" data-v-69e747b5>CSS 相关</p><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/css/spec" data-v-2f2cfafc data-v-8f4dc553><!--[-->CSS 语法<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/css/tricks" data-v-2f2cfafc data-v-8f4dc553><!--[-->CSS 奇淫技巧<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/sass/" data-v-2f2cfafc data-v-8f4dc553><!--[-->Sass 常用技巧<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><p class="title" data-v-69e747b5>element-ui 相关</p><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/elementUI/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->切换主题<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuLink" data-v-e7ea1737 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/vue/" data-v-2f2cfafc data-v-8f4dc553><!--[-->Vue 小技巧<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-e7ea1737 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/vite/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->Vite 相关<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-e7ea1737 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/node/npm" data-v-2f2cfafc data-v-8f4dc553><!--[-->node 相关<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><p class="title" data-v-69e747b5>终端相关</p><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/terminal/zsh" data-v-2f2cfafc data-v-8f4dc553><!--[-->Zsh 配置<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/terminal/toolkit" data-v-2f2cfafc data-v-8f4dc553><!--[-->命令行工具<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/terminal/shell" data-v-2f2cfafc data-v-8f4dc553><!--[-->Shell 命令<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuLink" data-v-e7ea1737 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/workflow/git/learn01" data-v-2f2cfafc data-v-8f4dc553><!--[-->Git 相关<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/yanfu_notes/pit/npm" tabindex="0" data-v-7f418b0f data-v-5e623618 data-v-8f4dc553><!--[-->踩坑记录<!--]--><!----></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7f418b0f data-v-764effdf><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-764effdf><span class="text" data-v-764effdf><!----> 提效工具 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-764effdf><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-764effdf><div class="VPMenu" data-v-764effdf data-v-e7ea1737><div class="items" data-v-e7ea1737><!--[--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><p class="title" data-v-69e747b5>软件推荐与配置</p><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/efficiency/software/cross-platform" data-v-2f2cfafc data-v-8f4dc553><!--[-->多平台软件<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/efficiency/software/mac" data-v-2f2cfafc data-v-8f4dc553><!--[-->Mac 平台<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/efficiency/software/windows" data-v-2f2cfafc data-v-8f4dc553><!--[-->Windows 平台<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/efficiency/software/browser" data-v-2f2cfafc data-v-8f4dc553><!--[-->浏览器设置与扩展<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/efficiency/software/vscode" data-v-2f2cfafc data-v-8f4dc553><!--[-->Visual Studio Code 配置<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/efficiency/software/webstorm" data-v-2f2cfafc data-v-8f4dc553><!--[-->WebStorm 配置<!--]--><!----></a></div><!--]--><!--]--></div><!--]--><!--[--><div class="VPMenuLink" data-v-e7ea1737 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/efficiency/online-tools" data-v-2f2cfafc data-v-8f4dc553><!--[-->在线工具<!--]--><!----></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-e7ea1737 data-v-2f2cfafc><a class="VPLink link" href="/yanfu_notes/efficiency/bookmark-scripts" data-v-2f2cfafc data-v-8f4dc553><!--[-->书签脚本<!--]--><!----></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="https://gitee.com/addminsjh" target="_blank" rel="noreferrer" tabindex="0" data-v-7f418b0f data-v-5e623618 data-v-8f4dc553><!--[-->烟浮YanFu<!--]--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" height="24px" viewbox="0 0 24 24" width="24px" class="icon" data-v-8f4dc553><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z"></path></svg></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-7c10cd25 data-v-f6a63727><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-f6a63727 data-v-87de0873 data-v-f3c41672><span class="check" data-v-f3c41672><span class="icon" data-v-f3c41672><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-87de0873><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-87de0873><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-7c10cd25 data-v-0394ad82 data-v-d7a53887><!--[--><a class="VPSocialLink" href="https://gitee.com/addminsjh" aria-label="github" target="_blank" rel="noopener" data-v-d7a53887 data-v-c530cc0a><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-7c10cd25 data-v-40855f84 data-v-764effdf><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-764effdf><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-764effdf><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-764effdf><div class="VPMenu" data-v-764effdf data-v-e7ea1737><!----><!--[--><!--[--><!----><div class="group" data-v-40855f84><div class="item appearance" data-v-40855f84><p class="label" data-v-40855f84>外观</p><div class="appearance-action" data-v-40855f84><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-40855f84 data-v-87de0873 data-v-f3c41672><span class="check" data-v-f3c41672><span class="icon" data-v-f3c41672><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-87de0873><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-87de0873><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div></div></div><div class="group" data-v-40855f84><div class="item social-links" data-v-40855f84><div class="VPSocialLinks social-links-list" data-v-40855f84 data-v-d7a53887><!--[--><a class="VPSocialLink" href="https://gitee.com/addminsjh" aria-label="github" target="_blank" rel="noopener" data-v-d7a53887 data-v-c530cc0a><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-7c10cd25 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav" data-v-b2cf3e0b data-v-392e1bf8><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-392e1bf8><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-392e1bf8><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-392e1bf8>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-392e1bf8 data-v-079b16a8><button data-v-079b16a8>返回顶部</button><!----></div></div><aside class="VPSidebar" data-v-b2cf3e0b data-v-af16598e><div class="curtain" data-v-af16598e></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-af16598e><span class="visually-hidden" id="sidebar-aria-label" data-v-af16598e> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-af16598e><section class="VPSidebarItem level-0 collapsible has-active" data-v-af16598e data-v-c4656e6d><div class="item" role="button" tabindex="0" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><h2 class="text" data-v-c4656e6d>常用工具/方法</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-c4656e6d><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-c4656e6d><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-c4656e6d><!--[--><div class="VPSidebarItem level-1 is-link is-active has-active" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/utils/library" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>工具库整理</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/utils/regexp" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>常用正则整理</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/utils/function" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>常用方法整理</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-af16598e><section class="VPSidebarItem level-0 collapsible" data-v-af16598e data-v-c4656e6d><div class="item" role="button" tabindex="0" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><h2 class="text" data-v-c4656e6d>CSS 相关</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-c4656e6d><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-c4656e6d><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-c4656e6d><!--[--><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/css/spec" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>CSS 语法</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/css/tricks" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>CSS 奇淫技巧</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/sass/" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>Sass 常用技巧</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/css/svg" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>快速实现SVG动态图标</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-af16598e><section class="VPSidebarItem level-0" data-v-af16598e data-v-c4656e6d><!----><div class="items" data-v-c4656e6d><!--[--><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/elementUI/learn01" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>ElementUI 相关</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/vue/" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>Vue 相关</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-af16598e><section class="VPSidebarItem level-0" data-v-af16598e data-v-c4656e6d><div class="item" role="button" tabindex="0" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><h2 class="text" data-v-c4656e6d>Vite 相关</h2><!----></div><div class="items" data-v-c4656e6d><!--[--><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/vite/learn01" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>Vite 配置-1</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/vite/learn02" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>Vite 配置-2</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/vite/learn03" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>src 配置</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-af16598e><section class="VPSidebarItem level-0" data-v-af16598e data-v-c4656e6d><div class="item" role="button" tabindex="0" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><h2 class="text" data-v-c4656e6d>Node 相关</h2><!----></div><div class="items" data-v-c4656e6d><!--[--><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/node/npm" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>npm 常用命令</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/node/nvm" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>nvm 常用命令</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-af16598e><section class="VPSidebarItem level-0 collapsible" data-v-af16598e data-v-c4656e6d><div class="item" role="button" tabindex="0" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><h2 class="text" data-v-c4656e6d>终端相关</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-c4656e6d><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-c4656e6d><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-c4656e6d><!--[--><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/terminal/zsh" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>Zsh 配置</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/terminal/toolkit" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>命令行工具</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/terminal/shell" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>Shell 命令</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/terminal/learn01" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>iTerm2 mac 终端命令行工具</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/terminal/learn02" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>oh-my-zsh 设置</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-af16598e><section class="VPSidebarItem level-0 collapsible" data-v-af16598e data-v-c4656e6d><div class="item" role="button" tabindex="0" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><h2 class="text" data-v-c4656e6d>git</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-c4656e6d><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-c4656e6d><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-c4656e6d><!--[--><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/git/learn01" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>Git 相关技巧</p><!--]--><!----></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c4656e6d data-v-c4656e6d><div class="item" data-v-c4656e6d><div class="indicator" data-v-c4656e6d></div><a class="VPLink link link" href="/yanfu_notes/workflow/git/learn02" data-v-c4656e6d data-v-8f4dc553><!--[--><p class="text" data-v-c4656e6d>Git 命令清单</p><!--]--><!----></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-b2cf3e0b data-v-a494bd1d><div class="VPDoc has-sidebar has-aside" data-v-a494bd1d data-v-c4b0d3cf><!--[--><!--]--><div class="container" data-v-c4b0d3cf><div class="aside" data-v-c4b0d3cf><div class="aside-curtain" data-v-c4b0d3cf></div><div class="aside-container" data-v-c4b0d3cf><div class="aside-content" data-v-c4b0d3cf><div class="VPDocAside" data-v-c4b0d3cf data-v-3f215769><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" data-v-3f215769 data-v-ff0f39c8><div class="content" data-v-ff0f39c8><div class="outline-marker" data-v-ff0f39c8></div><div class="outline-title" data-v-ff0f39c8>本页目录</div><nav aria-labelledby="doc-outline-aria-label" data-v-ff0f39c8><span class="visually-hidden" id="doc-outline-aria-label" data-v-ff0f39c8> Table of Contents for current page </span><ul class="root" data-v-ff0f39c8 data-v-9a431c33><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--[--><!--[--><!--[--><div class="VPDocAsideSponsors"><div class="VPSponsors vp-sponsor aside"><!--[--><section class="vp-sponsor-section"><!----><div class="VPSponsorsGrid vp-sponsor-grid medium"><!--[--><div class="vp-sponsor-grid-item"><a class="vp-sponsor-grid-link" target="_blank" rel="sponsored noopener"><article class="vp-sponsor-grid-box"><h4 class="visually-hidden"></h4><img class="vp-sponsor-grid-image" src="https://addminsjh.gitee.io/yanfu_notes/1.png"></article></a></div><!--]--></div></section><section class="vp-sponsor-section"><!----><div class="VPSponsorsGrid vp-sponsor-grid medium"><!--[--><div class="vp-sponsor-grid-item"><a class="vp-sponsor-grid-link" target="_blank" rel="sponsored noopener"><article class="vp-sponsor-grid-box"><h4 class="visually-hidden"></h4><img class="vp-sponsor-grid-image" src="https://addminsjh.gitee.io/yanfu_notes/1.png"></article></a></div><!--]--></div></section><!--]--></div></div><!--]--><!--]--><!--]--><!--]--></div></div></div></div><div class="content" data-v-c4b0d3cf><div class="content-container" data-v-c4b0d3cf><!--[--><!--]--><!----><main class="main" data-v-c4b0d3cf><div style="position:relative;" class="vp-doc _yanfu_notes_workflow_utils_library" data-v-c4b0d3cf><div><h1 id="常用工具库整理" tabindex="-1">常用工具库整理 <a class="header-anchor" href="#常用工具库整理" aria-label="Permalink to &quot;常用工具库整理&quot;">​</a></h1><div class="tip custom-block"><p class="custom-block-title">TIP</p><blockquote><p>使用过或发现的一些类库</p></blockquote></div><!--[--><!--[--><h2 id="工具库" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>工具库 <a class="header-anchor" href="#工具库" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/lodash/lodash" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="lodash" class="title" data-v-afca77c9>lodash</h5></div><!----><p class="desc" data-v-afca77c9>是一个一致性、模块化、高性能的 JavaScript 实用工具库</p></article></a><a class="m-nav-link" href="https://github.com/lodash/lodash" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="ramda" class="title" data-v-afca77c9>ramda</h5></div><!----><p class="desc" data-v-afca77c9>专为函数式编程而设计的工具库</p></article></a><a class="m-nav-link" href="https://github.com/lodash/lodash" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="qs" class="title" data-v-afca77c9>qs</h5></div><!----><p class="desc" data-v-afca77c9>带有一些附加安全性的请求参数 parse 和 stringify 库</p></article></a><!--]--></div><!--]--><!--[--><h2 id="时间处理" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>时间处理 <a class="header-anchor" href="#时间处理" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/moment/moment" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="moment" class="title" data-v-afca77c9>moment</h5></div><!----><p class="desc" data-v-afca77c9>JavaScript 日期处理类库</p></article></a><a class="m-nav-link" href="https://github.com/iamkun/dayjs" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="dayjs" class="title" data-v-afca77c9>dayjs</h5></div><!----><p class="desc" data-v-afca77c9>一个轻量的处理时间和日期的 JavaScript 库，和 Moment.js 的 API 设计保持完全一样</p></article></a><a class="m-nav-link" href="https://github.com/date-fns/date-fns" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="date-fns" class="title" data-v-afca77c9>date-fns</h5></div><!----><p class="desc" data-v-afca77c9>轻量级的 JavaScript 日期库，纯函数实现支持模块化</p></article></a><a class="m-nav-link" href="https://github.com/6tail/lunar-javascript" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="lunar-javascript" class="title" data-v-afca77c9>lunar-javascript</h5></div><!----><p class="desc" data-v-afca77c9>支持阳历、阴历、佛历和道历的日历工具库</p></article></a><!--]--></div><!--]--><!--[--><h2 id="请求处理" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>请求处理 <a class="header-anchor" href="#请求处理" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/axios/axios" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="axios" class="title" data-v-afca77c9>axios</h5></div><!----><p class="desc" data-v-afca77c9>是一个基于 promise 的 HTTP 库，可以用在浏览器和 node.js 中</p></article></a><!--]--></div><!--]--><!--[--><h2 id="精度处理" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>精度处理 <a class="header-anchor" href="#精度处理" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/MikeMcl/big.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="big-js" class="title" data-v-afca77c9>big.js</h5></div><!----><p class="desc" data-v-afca77c9>用于任意精度的十进制算术运算</p></article></a><a class="m-nav-link" href="https://github.com/nefe/number-precision" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="number-precision" class="title" data-v-afca77c9>number-precision</h5></div><!----><p class="desc" data-v-afca77c9>超小型精确四则运算</p></article></a><!--]--></div><!--]--><!--[--><h2 id="字符串处理" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>字符串处理 <a class="header-anchor" href="#字符串处理" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/blakeembrey/change-case" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="change-case" class="title" data-v-afca77c9>change-case</h5></div><!----><p class="desc" data-v-afca77c9>快速转换字符串格式，支持 camelCase, PascalCase, Capital Case, snake_case, param-case, CONSTANT_CASE 等</p></article></a><a class="m-nav-link" href="https://github.com/mathiasbynens/emoji-regex" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="emoji-regex" class="title" data-v-afca77c9>emoji-regex</h5></div><!----><p class="desc" data-v-afca77c9>匹配 emoji 的正则表达式</p></article></a><!--]--></div><!--]--><!--[--><h2 id="动画" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>动画 <a class="header-anchor" href="#动画" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/mattboldt/typed.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="typed-js" class="title" data-v-afca77c9>typed.js</h5></div><!----><p class="desc" data-v-afca77c9>动态打字效果</p></article></a><a class="m-nav-link" href="https://github.com/tweenjs/tween.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="tween-js" class="title" data-v-afca77c9>tween.js</h5></div><!----><p class="desc" data-v-afca77c9>补间动画引擎</p></article></a><a class="m-nav-link" href="https://github.com/airbnb/lottie-web" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="lottie" class="title" data-v-afca77c9>lottie</h5></div><!----><p class="desc" data-v-afca77c9>基于跨平台动画渲染库，用于解析使用 Bodymovin 导出为 json 的 [Adobe After Effects](https://www.adobe.com/products/aftereffects.html) 动画</p></article></a><a class="m-nav-link" href="https://github.com/greensock/GSAP" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="gsap" class="title" data-v-afca77c9>gsap</h5></div><!----><p class="desc" data-v-afca77c9>GreenSock 动画平台（GSAP）可以对 JavaScript 可以操作的所有内容进行动画处理</p></article></a><!--]--></div><!--]--><!--[--><h2 id="特效" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>特效 <a class="header-anchor" href="#特效" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/catdad/canvas-confetti" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="canvas-confetti" class="title" data-v-afca77c9>canvas-confetti</h5></div><!----><p class="desc" data-v-afca77c9>五彩纸屑特效</p></article></a><!--]--></div><!--]--><!--[--><h2 id="本地存储" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>本地存储 <a class="header-anchor" href="#本地存储" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/localForage/localForage" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="localforage" class="title" data-v-afca77c9>localForage</h5></div><!----><p class="desc" data-v-afca77c9>一个快速、简单的 JavaScript 存储库([中文文档](https://localforage.docschina.org/))</p></article></a><!--]--></div><!--]--><!--[--><h2 id="滚动处理" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>滚动处理 <a class="header-anchor" href="#滚动处理" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/ustbhuangyi/better-scroll" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="better-scroll" class="title" data-v-afca77c9>better-scroll</h5></div><!----><p class="desc" data-v-afca77c9>重点解决移动端 (已支持 PC) 各种滚动场景需求的插件</p></article></a><!--]--></div><!--]--><!--[--><h2 id="事件处理" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>事件处理 <a class="header-anchor" href="#事件处理" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/jaywcjlove/hotkeys" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="hotkeys-js" class="title" data-v-afca77c9>hotkeys-js</h5></div><!----><p class="desc" data-v-afca77c9>用于捕获键盘输入和输入的组合键</p></article></a><!--]--></div><!--]--><!--[--><h2 id="图片处理" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>图片处理 <a class="header-anchor" href="#图片处理" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/niklasvh/html2canvas" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="html2canvas" class="title" data-v-afca77c9>html2canvas</h5></div><!----><p class="desc" data-v-afca77c9>页面截图</p></article></a><a class="m-nav-link" href="https://github.com/francoischalifour/medium-zoom" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="medium-zoom" class="title" data-v-afca77c9>medium-zoom</h5></div><!----><p class="desc" data-v-afca77c9>为图片提供可缩放的功能</p></article></a><a class="m-nav-link" href="https://github.com/soldair/node-qrcode" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="qrcode" class="title" data-v-afca77c9>qrcode</h5></div><!----><p class="desc" data-v-afca77c9>QR 码和 2d 条码生成器（支持浏览器和 Node)</p></article></a><a class="m-nav-link" href="https://github.com/zpao/qrcode.react" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="qrcode-react" class="title" data-v-afca77c9>qrcode.react</h5></div><!----><p class="desc" data-v-afca77c9>React 组件</p></article></a><a class="m-nav-link" href="https://github.com/gtanner/qrcode-terminal" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="qrcode-terminal" class="title" data-v-afca77c9>qrcode-terminal</h5></div><!----><p class="desc" data-v-afca77c9>在终端中生成二维码</p></article></a><!--]--></div><!--]--><!--[--><h2 id="文件处理" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>文件处理 <a class="header-anchor" href="#文件处理" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/eligrey/FileSaver.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="filesaver-js" class="title" data-v-afca77c9>FileSaver.js</h5></div><!----><p class="desc" data-v-afca77c9>保存/下载文件(受 blob 的大小和内存限制)</p></article></a><a class="m-nav-link" href="https://github.com/jimmywarting/StreamSaver.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="streamsaver-js" class="title" data-v-afca77c9>StreamSaver.js</h5></div><!----><p class="desc" data-v-afca77c9>保存/下载文件(不受 blob 的大小和内存限制)</p></article></a><a class="m-nav-link" href="https://github.com/SheetJS/sheetjs" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="sheetjs" class="title" data-v-afca77c9>sheetjs</h5></div><!----><p class="desc" data-v-afca77c9>用于 Excel 的读取和导出</p></article></a><a class="m-nav-link" href="https://github.com/jprichardson/node-fs-extra" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="node-fs-extra" class="title" data-v-afca77c9>node-fs-extra</h5></div><!----><p class="desc" data-v-afca77c9>[Node fs 模块](http://nodejs.cn/api/fs.html#fs_file_system) 的增强（如 promise 的支持）</p></article></a><a class="m-nav-link" href="https://github.com/isaacs/rimraf" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="rimraf" class="title" data-v-afca77c9>rimraf</h5></div><!----><p class="desc" data-v-afca77c9>用于删除文件和文件夹，类似 rm -rf</p></article></a><a class="m-nav-link" href="https://github.com/isaacs/node-glob" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="glob" class="title" data-v-afca77c9>glob</h5></div><!----><p class="desc" data-v-afca77c9>文件查找</p></article></a><a class="m-nav-link" href="https://github.com/sindresorhus/globby" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="globby" class="title" data-v-afca77c9>globby</h5></div><!----><p class="desc" data-v-afca77c9>使用更友好的文件查找（支持 promise、否定模式、ignore 文件配置等）</p></article></a><!--]--></div><!--]--><!--[--><h2 id="版本号处理" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>版本号处理 <a class="header-anchor" href="#版本号处理" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/npm/node-semver" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="semver" class="title" data-v-afca77c9>semver</h5></div><!----><p class="desc" data-v-afca77c9>语义化版本解析器</p></article></a><!--]--></div><!--]--><!--[--><h2 id="数据校验" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>数据校验 <a class="header-anchor" href="#数据校验" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/validatorjs/validator.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="validator-js" class="title" data-v-afca77c9>validator.js</h5></div><!----><p class="desc" data-v-afca77c9>字符串验证</p></article></a><a class="m-nav-link" href="https://github.com/yiminghe/async-validator" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="async-validator" class="title" data-v-afca77c9>async-validator</h5></div><!----><p class="desc" data-v-afca77c9>异步表单验证</p></article></a><!--]--></div><!--]--><!--[--><h2 id="富文本" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>富文本 <a class="header-anchor" href="#富文本" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/margox/braft-editor" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="braft-editor" class="title" data-v-afca77c9>braft-editor</h5></div><!----><p class="desc" data-v-afca77c9>React 富文本编辑器</p></article></a><!--]--></div><!--]--><!--[--><h2 id="代码编辑器" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>代码编辑器 <a class="header-anchor" href="#代码编辑器" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/microsoft/monaco-editor" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="monaco-editor" class="title" data-v-afca77c9>monaco-editor</h5></div><!----><p class="desc" data-v-afca77c9>微软开源的基于 VSCode 的代码编辑器。支持智能提示、代码高亮、代码格式化等。</p></article></a><!--]--></div><!--]--><!--[--><h2 id="轮播" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>轮播 <a class="header-anchor" href="#轮播" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/nolimits4web/swiper" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="swiper" class="title" data-v-afca77c9>swiper</h5></div><!----><p class="desc" data-v-afca77c9>高性能的触摸滑动插件，支持 Javascript Vue 3 React AngularJS Solid Svelte</p></article></a><a class="m-nav-link" href="https://github.com/surmon-china/vue-awesome-swiper" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="vue-awesome-swiper" class="title" data-v-afca77c9>vue-awesome-swiper</h5></div><!----><p class="desc" data-v-afca77c9>基于 swiper 封装的 Vue 组件，支持 Vue 2 和 Vue 3</p></article></a><!--]--></div><!--]--><!--[--><h2 id="表格" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>表格 <a class="header-anchor" href="#表格" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/ag-grid/ag-grid" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="ag-grid" class="title" data-v-afca77c9>ag-grid</h5></div><!----><p class="desc" data-v-afca77c9>功能齐全的高性能表格，支持 Javascript `ue React AngularJS Web Components</p></article></a><!--]--></div><!--]--><!--[--><h2 id="用户体验" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>用户体验 <a class="header-anchor" href="#用户体验" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/usablica/intro.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="intro-js" class="title" data-v-afca77c9>intro.js</h5></div><!----><p class="desc" data-v-afca77c9>用户引导动画</p></article></a><a class="m-nav-link" href="https://github.com/kamranahmedse/driver.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="driver-js" class="title" data-v-afca77c9>driver.js</h5></div><!----><p class="desc" data-v-afca77c9>用户引导动画</p></article></a><a class="m-nav-link" href="https://github.com/zenorocha/clipboard.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="clipboard-js" class="title" data-v-afca77c9>clipboard.js</h5></div><!----><p class="desc" data-v-afca77c9>复制到剪贴板</p></article></a><a class="m-nav-link" href="https://github.com/sudodoki/copy-to-clipboard" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="copy-to-clipboard" class="title" data-v-afca77c9>copy-to-clipboard</h5></div><!----><p class="desc" data-v-afca77c9>复制到剪贴板</p></article></a><a class="m-nav-link" href="https://github.com/sindresorhus/screenfull.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="screenfull-js" class="title" data-v-afca77c9>screenfull.js</h5></div><!----><p class="desc" data-v-afca77c9>将页面或任何元素全屏显示</p></article></a><!--]--></div><!--]--><!--[--><h2 id="webpack" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>Webpack <a class="header-anchor" href="#webpack" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/neutrinojs/webpack-chain" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="webpack-chain" class="title" data-v-afca77c9>webpack-chain</h5></div><!----><p class="desc" data-v-afca77c9>使用链式 API 来生成和简化 webpack 的配置的修改</p></article></a><a class="m-nav-link" href="https://github.com/stephencookdev/speed-measure-webpack-plugin" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="speed-measure-webpack-plugin" class="title" data-v-afca77c9>speed-measure-webpack-plugin</h5></div><!----><p class="desc" data-v-afca77c9>统计 webpack 在各阶段的构建速度</p></article></a><a class="m-nav-link" href="https://github.com/webpack-contrib/webpack-bundle-analyzer" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="webpack-bundle-analyzer" class="title" data-v-afca77c9>webpack-bundle-analyzer</h5></div><!----><p class="desc" data-v-afca77c9>通过可视化分析 webpack 打包文件的大小</p></article></a><!--]--></div><!--]--><!--[--><h2 id="解析相关" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>解析相关 <a class="header-anchor" href="#解析相关" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/cheeriojs/cheerio" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="cheerio" class="title" data-v-afca77c9>cheerio</h5></div><!----><p class="desc" data-v-afca77c9>为服务器特别定制的，快速、灵活、实施的 jQuery 核心实现，可以解析任何 HTML 或 XML 文档</p></article></a><!--]--></div><!--]--><!--[--><h2 id="自动化工具" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>自动化工具 <a class="header-anchor" href="#自动化工具" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/puppeteer/puppeteer" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="puppeteer" class="title" data-v-afca77c9>puppeteer</h5></div><!----><p class="desc" data-v-afca77c9>控制 Chromium 的自动化工具</p></article></a><a class="m-nav-link" href="https://github.com/microsoft/playwright" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="playwright" class="title" data-v-afca77c9>playwright</h5></div><!----><p class="desc" data-v-afca77c9>支持 Firefox / Chrome / WebKit(Safari) 三大浏览器的自动化工具</p></article></a><!--]--></div><!--]--><!--[--><h2 id="lint-格式化相关" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>lint / 格式化相关 <a class="header-anchor" href="#lint-格式化相关" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/prettier/prettier" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="prettier" class="title" data-v-afca77c9>prettier</h5></div><!----><p class="desc" data-v-afca77c9>代码格式化工具</p></article></a><a class="m-nav-link" href="https://github.com/eslint/eslint" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="eslint" class="title" data-v-afca77c9>eslint</h5></div><!----><p class="desc" data-v-afca77c9>ECMAScript/JavaScript 代码检查工具</p></article></a><a class="m-nav-link" href="https://github.com/stylelint/stylelint" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="stylelint" class="title" data-v-afca77c9>stylelint</h5></div><!----><p class="desc" data-v-afca77c9>CSS 代码检查工具</p></article></a><a class="m-nav-link" href="https://github.com/DavidAnson/markdownlint" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="markdownlint" class="title" data-v-afca77c9>markdownlint</h5></div><!----><p class="desc" data-v-afca77c9>Markdown 格式检查工具</p></article></a><a class="m-nav-link" href="https://github.com/conventional-changelog/commitlint" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="commitlint" class="title" data-v-afca77c9>commitlint</h5></div><!----><p class="desc" data-v-afca77c9>Git Commit Messages 格式检查工具</p></article></a><!--]--></div><!--]--><!--[--><h2 id="相关辅助工具" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>相关辅助工具 <a class="header-anchor" href="#相关辅助工具" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/typicode/husky" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="husky" class="title" data-v-afca77c9>husky</h5></div><!----><p class="desc" data-v-afca77c9>Git Hooks 工具，让你操作 `it Hooks 变得更容易</p></article></a><a class="m-nav-link" href="https://github.com/okonet/lint-staged" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="lint-staged" class="title" data-v-afca77c9>lint-staged</h5></div><!----><p class="desc" data-v-afca77c9>只对 Git 暂存文件运行 lint 从而提高速度</p></article></a><a class="m-nav-link" href="https://github.com/commitizen/cz-cli" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="commitizen" class="title" data-v-afca77c9>commitizen</h5></div><!----><p class="desc" data-v-afca77c9>commit 辅助工具，获得有关提交消息格式的即时反馈</p></article></a><!--]--></div><!--]--><!--[--><h2 id="cli-相关" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>CLI 相关 <a class="header-anchor" href="#cli-相关" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/google/zx" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="zx" class="title" data-v-afca77c9>zx</h5></div><!----><p class="desc" data-v-afca77c9>用 JavaScript 或 TypeScript 编写简单的命令行脚本</p></article></a><a class="m-nav-link" href="https://github.com/SBoudrias/Inquirer.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="inquirer" class="title" data-v-afca77c9>inquirer</h5></div><!----><p class="desc" data-v-afca77c9>交互式命令行工具</p></article></a><a class="m-nav-link" href="https://github.com/enquirer/enquirer" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="enquirer" class="title" data-v-afca77c9>enquirer</h5></div><!----><p class="desc" data-v-afca77c9>交互式命令行工具（更好看）</p></article></a><a class="m-nav-link" href="https://github.com/shelljs/shelljs" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="shelljs" class="title" data-v-afca77c9>shelljs</h5></div><!----><p class="desc" data-v-afca77c9>是 Unix Shell 在 Node.js API 层的轻量级实现，可以很方便的调用系统命令</p></article></a><a class="m-nav-link" href="https://github.com/sindresorhus/execa" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="execa" class="title" data-v-afca77c9>execa</h5></div><!----><p class="desc" data-v-afca77c9>[Node child_process 模块](http://nodejs.cn/api/child_process.html)的增强（如 promise 的支持、移除输出中最后的换行符等）</p></article></a><a class="m-nav-link" href="https://github.com/mysticatea/npm-run-all" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="npm-run-all" class="title" data-v-afca77c9>npm-run-all</h5></div><!----><p class="desc" data-v-afca77c9>用于并行或串行执行多个 npm 脚本</p></article></a><a class="m-nav-link" href="https://github.com/tj/commander.js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="commander-js" class="title" data-v-afca77c9>commander.js</h5></div><!----><p class="desc" data-v-afca77c9>编写指令和处理命令行</p></article></a><a class="m-nav-link" href="https://github.com/yargs/yargs" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="yargs" class="title" data-v-afca77c9>yargs</h5></div><!----><p class="desc" data-v-afca77c9>命令行参数解析</p></article></a><a class="m-nav-link" href="https://github.com/plopjs/plop" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="plop" class="title" data-v-afca77c9>plop</h5></div><!----><p class="desc" data-v-afca77c9>轻量级的项目搭建生成工具</p></article></a><a class="m-nav-link" href="https://github.com/motdotla/dotenv" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="dotenv" class="title" data-v-afca77c9>dotenv</h5></div><!----><p class="desc" data-v-afca77c9>从 .env 文件加载环境变量到 process.env</p></article></a><a class="m-nav-link" href="https://github.com/motdotla/dotenv-expand" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="dotenv-expand" class="title" data-v-afca77c9>dotenv-expand</h5></div><!----><p class="desc" data-v-afca77c9>dotenv 的变量扩展，使 .env 文件支持变量语法</p></article></a><a class="m-nav-link" href="https://github.com/steveukx/git-js" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="simple-git" class="title" data-v-afca77c9>simple-git</h5></div><!----><p class="desc" data-v-afca77c9>在 node 中执行 git 命令</p></article></a><a class="m-nav-link" href="https://github.com/davidtheclark/cosmiconfig" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="cosmiconfig" class="title" data-v-afca77c9>cosmiconfig</h5></div><!----><p class="desc" data-v-afca77c9>搜索并加载配置文件（会查找 package.json 的配置项以及 name.[rc, json, .yaml, yml, js, cjs] 文件）</p></article></a><!--]--></div><!--]--><!--[--><h2 id="命令行输出美化" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>命令行输出美化 <a class="header-anchor" href="#命令行输出美化" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/chalk/chalk" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="chalk" class="title" data-v-afca77c9>chalk</h5></div><!----><p class="desc" data-v-afca77c9>修改控制台内容输出的样式</p></article></a><a class="m-nav-link" href="https://github.com/sindresorhus/ora" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="ora" class="title" data-v-afca77c9>ora</h5></div><!----><p class="desc" data-v-afca77c9>命令行 loading 效果</p></article></a><!--]--></div><!--]--><!--[--><h2 id="命令行输出美化" tabindex="-1" style="--b3f83362:200px;" data-v-0a75dc1c>命令行输出美化 <a class="header-anchor" href="#命令行输出美化" aria-hidden="true" data-v-0a75dc1c></a></h2><div class="m-nav-links" style="--b3f83362:200px;" data-v-0a75dc1c><!--[--><a class="m-nav-link" href="https://github.com/vuejs/vuepress" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="vuepress" class="title" data-v-afca77c9>VuePress</h5></div><!----><p class="desc" data-v-afca77c9>Vue 驱动的静态网站生成器</p></article></a><a class="m-nav-link" href="https://github.com/umijs/dumi" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="dumi" class="title" data-v-afca77c9>dumi</h5></div><!----><p class="desc" data-v-afca77c9>基于 Umi 为组件开发场景而生的文档工具</p></article></a><a class="m-nav-link" href="https://github.com/facebook/docusaurus" target="_blank" rel="noreferrer" data-v-0a75dc1c data-v-afca77c9><article class="box" data-v-afca77c9><div class="box-header" data-v-afca77c9><!--[--><!----><!--]--><h5 id="docusaurus" class="title" data-v-afca77c9>Docusaurus</h5></div><!----><p class="desc" data-v-afca77c9>基于 React 的静态网站生成器</p></article></a><!--]--></div><!--]--><!--]--></div></div></main><footer class="VPDocFooter" data-v-c4b0d3cf data-v-face870a><!--[--><!--]--><div class="edit-info" data-v-face870a><!----><div class="last-updated" data-v-face870a><p class="VPLastUpdated" data-v-face870a data-v-7b3ebfe1>上次更新: <time datetime="2023-05-25T09:25:09.000Z" data-v-7b3ebfe1></time></p></div></div><div class="prev-next" data-v-face870a><div class="pager" data-v-face870a><!----></div><div class="pager" data-v-face870a><a class="pager-link next" href="/yanfu_notes/workflow/utils/regexp" data-v-face870a><span class="desc" data-v-face870a>下一篇</span><span class="title" data-v-face870a>常用正则整理</span></a></div></div></footer><!--[--><!--[--><!--[--><div class="copyright" data-v-e71ae0b1><img class="visitor" src="https://visitor-badge.laobi.icu/badge?page_id=yanfu./workflow/utils/library" title="当前页面累计访问数" onerror="this.style.display=&#39;none&#39;" data-v-e71ae0b1> Copyright © 2019-present 烟浮YanFu </div><!--]--><!--]--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-b2cf3e0b data-v-2f86ebd2><div class="container" data-v-2f86ebd2><p class="message" data-v-2f86ebd2>如有转载或 CV 的请标注本站原文地址</p><p class="copyright" data-v-2f86ebd2>Copyright © 2023-present 烟浮YanFu</p></div></footer><!--[--><!--]--></div></div>
    <script>__VP_HASH_MAP__ = JSON.parse("{\"dailynotes_01_learn01.md\":\"fb9d824e\",\"dailynotes_01_learn03.md\":\"60f46bc0\",\"dailynotes_02_learn01.md\":\"7416609d\",\"dailynotes_01_learn02.md\":\"8e1f9322\",\"efficiency_software_cross-platform.md\":\"3f9dbff0\",\"efficiency_online-tools.md\":\"164f32c7\",\"efficiency_bookmark-scripts.md\":\"6c8f7c3b\",\"efficiency_software_browser.md\":\"d56ea2c6\",\"efficiency_software_mac.md\":\"89e295d7\",\"efficiency_software_webstorm.md\":\"f520bee8\",\"efficiency_software_windows.md\":\"a4b1847b\",\"pit_element_plus.md\":\"c486ecc4\",\"index.md\":\"0afacadf\",\"pit_h5.md\":\"74a083f0\",\"nav.md\":\"d2281484\",\"efficiency_software_vscode.md\":\"05a5d1ca\",\"pinia_learn01.md\":\"e4d4d76a\",\"pit_npm.md\":\"0ad9e23f\",\"pit_pc.md\":\"b86be787\",\"web_dockers_01_learn01.md\":\"d9a875dd\",\"web_dockers_02_learn01.md\":\"ba275b0f\",\"web_javascript_learn01.md\":\"4c60f698\",\"dailynotes_03_learn03.md\":\"8894bec4\",\"web_javascript_learn02.md\":\"0232787a\",\"web_javascript_learn03.md\":\"3bb3518c\",\"web_javascript_learn04.md\":\"265abc2b\",\"web_javascript_learn06.md\":\"9015895d\",\"web_javascript_learn05.md\":\"ef411c90\",\"web_javascript_learn07.md\":\"c2c69212\",\"web_javascript_learn09.md\":\"fa3a8fc7\",\"web_javascript_learn08.md\":\"3020b687\",\"web_javascript_learn10.md\":\"69910949\",\"web_javascript_learn12.md\":\"e84cf70e\",\"web_javascript_learn15.md\":\"91528dcd\",\"web_javascript_learn13.md\":\"8da7a486\",\"web_javascript_learn14.md\":\"302d3488\",\"web_javascript_learn17.md\":\"2369e6f4\",\"web_javascript_learn11.md\":\"c15229d7\",\"web_javascript_learn19.md\":\"b07bf70b\",\"web_javascript_learn16.md\":\"c8f4e19c\",\"web_javascript_learn20.md\":\"531d3a7d\",\"web_javascript_learn18.md\":\"11de8e86\",\"web_javascript_learn21.md\":\"1bac3aa3\",\"web_javascript_learn22.md\":\"459b0a5f\",\"dailynotes_03_learn01.md\":\"451a46a2\",\"web_javascript_learn24.md\":\"d1ceaca2\",\"web_javascript_top_learn02.md\":\"cadd2bb4\",\"web_javascript_learn23.md\":\"48da7355\",\"web_javascript_top_learn04.md\":\"9f44d103\",\"web_javascript_top_learn03.md\":\"93b74f4a\",\"web_javascript_top_learn01.md\":\"5007d6f4\",\"web_javascript_top_learn05.md\":\"76650f3a\",\"web_javascript_top_learn07.md\":\"64b677c1\",\"web_javascript_top_learn08.md\":\"93de8587\",\"web_javascript_top_learn06.md\":\"164b81a9\",\"web_javascript_top_learn09.md\":\"2dbcb5a0\",\"web_javascript_top_learn10.md\":\"465a5e5f\",\"web_javascript_top_learn11.md\":\"2e5c855f\",\"web_javascript_top_learn12.md\":\"8b341d16\",\"web_javascript_top_learn14.md\":\"9893f410\",\"web_javascript_top_learn15.md\":\"7fe2d8c4\",\"web_javascript_top_learn16.md\":\"6afe0a71\",\"web_javascript_top_learn17.md\":\"7d483cde\",\"web_javascript_top_learn13.md\":\"60fe7737\",\"web_javascript_top_learn18.md\":\"f2ad9e08\",\"web_javascript_top_learn19.md\":\"ca4e880b\",\"web_javascript_top_learn20.md\":\"e09985e1\",\"web_javascript_top_learn21.md\":\"f431bde8\",\"web_javascript_top_learn23.md\":\"1ca9118e\",\"web_javascript_top_learn22.md\":\"43c7120a\",\"web_javascript_top_learn24.md\":\"bc870303\",\"web_next_02_learn02.md\":\"d967166f\",\"web_next_02_learn03.md\":\"bbc5505d\",\"web_next_02_learn01.md\":\"84ff5279\",\"web_next_02_learn04.md\":\"a3a5e42a\",\"web_next_02_learn05.md\":\"f51c80d0\",\"web_next_01_learn01.md\":\"c7e46d8f\",\"web_next_02_learn07.md\":\"71216e95\",\"web_next_02_learn06.md\":\"7927c5af\",\"web_next_03_learn02.md\":\"9bede240\",\"web_next_03_learn03.md\":\"3ad4672d\",\"web_javascript_top_learn25.md\":\"826686c5\",\"web_next_03_learn01.md\":\"21002d61\",\"web_next_03_learn06.md\":\"5d763be0\",\"web_next_04_learn02.md\":\"0a16aca0\",\"web_next_04_learn01.md\":\"2d05c407\",\"web_next_03_learn04.md\":\"0990a5f4\",\"web_nodelearn_01_learn01.md\":\"961fc011\",\"web_next_03_learn05.md\":\"1ea11ee1\",\"web_nodelearn_01_learn02.md\":\"e31bd5c2\",\"web_nodelearn_01_learn03.md\":\"a0dbdda5\",\"web_nodelearn_01_learn04.md\":\"da3a7c4d\",\"web_nodelearn_02_learn01.md\":\"4c8a3429\",\"web_nodelearn_01_learn05.md\":\"4d7b266a\",\"web_nodelearn_02_learn03.md\":\"82b7c959\",\"web_nodelearn_02_learn06.md\":\"c5a69578\",\"web_nodelearn_02_learn05.md\":\"36e8211f\",\"web_nodelearn_02_learn04.md\":\"91b61deb\",\"web_nodelearn_02_learn07.md\":\"3646b8b1\",\"web_nodelearn_02_learn02.md\":\"daba3cb5\",\"web_nodelearn_03_learn01.md\":\"17b60c45\",\"web_nodelearn_03_learn04.md\":\"3a348bc5\",\"web_nodelearn_03_learn05.md\":\"e2316074\",\"web_nodelearn_03_learn02.md\":\"8ec48efb\",\"web_nodelearn_03_learn03.md\":\"8e6464e6\",\"web_nodelearn_04_learn02.md\":\"f2918e2b\",\"web_nodelearn_04_learn01.md\":\"e1e07a57\",\"web_nodelearn_04_learn03.md\":\"197f148a\",\"web_nodelearn_04_learn05.md\":\"01d005e4\",\"web_nodelearn_04_learn04.md\":\"5554e554\",\"web_nodelearn_04_learn06.md\":\"fd3ae81a\",\"web_nodelearn_04_learn08.md\":\"75d1b8f0\",\"web_nodelearn_04_learn09.md\":\"dac55aba\",\"web_nodelearn_05_learn01.md\":\"3d023037\",\"web_nodelearn_04_learn07.md\":\"e07185cf\",\"web_nodelearn_05_learn02.md\":\"ef127427\",\"web_nodelearn_05_learn03.md\":\"9ab16eeb\",\"web_nodelearn_05_learn04.md\":\"e476e037\",\"web_nodelearn_06_learn01.md\":\"441dc056\",\"web_nodelearn_06_learn02.md\":\"2a3570db\",\"web_nodelearn_06_learn03.md\":\"29ab46dd\",\"web_nodelearn_06_learn04.md\":\"cb981d59\",\"web_nodelearn_07_learn02.md\":\"0ea2b76f\",\"web_nodelearn_07_learn01.md\":\"8584ca0a\",\"web_nuxt3_01_learn01.md\":\"87060502\",\"web_nodelearn_07_learn03.md\":\"2ae0d2ba\",\"web_nuxt3_01_learn02.md\":\"650e16a3\",\"web_nuxt3_01_learn04.md\":\"e1789d7b\",\"web_nuxt3_01_learn03.md\":\"0c84a2bb\",\"web_nuxt3_01_learn05.md\":\"a64f0991\",\"web_nuxt3_01_learn07.md\":\"be86f7ed\",\"web_nuxt3_01_learn06.md\":\"6a8069ab\",\"web_nuxt3_02_learn01.md\":\"3d5cef8d\",\"web_nuxt3_02_learn02.md\":\"7b907f5e\",\"web_nuxt3_02_learn05.md\":\"a7113c22\",\"web_nuxt3_02_learn04.md\":\"19a8b1db\",\"web_nuxt3_02_learn03.md\":\"ef8ae51a\",\"web_nuxt3_02_learn06.md\":\"1948f7e1\",\"web_nuxt3_03_learn01.md\":\"62c770a2\",\"web_nuxt3_02_learn07.md\":\"758fe1ac\",\"web_nuxt3_03_learn02.md\":\"fe0b0d28\",\"web_nuxt3_03_learn04.md\":\"00c36249\",\"web_nuxt3_03_learn03.md\":\"f68d33b2\",\"web_nuxt3_03_learn05.md\":\"c3c5e972\",\"web_nuxt3_03_learn06.md\":\"044a942d\",\"web_nuxt3_03_learn07.md\":\"08354a10\",\"web_nuxt3_04_learn02.md\":\"96f39d45\",\"web_nuxt3_04_learn01.md\":\"f0e8d66e\",\"web_nuxt3_04_learn03.md\":\"1f3d1e23\",\"web_nuxt3_04_learn04.md\":\"fc3fddd0\",\"web_nuxt3_04_learn05.md\":\"1548e8b4\",\"web_nuxt3_04_learn06.md\":\"3fd55dff\",\"web_nuxt3_04_learn07.md\":\"ffc131f8\",\"web_nuxt3_04_learn08.md\":\"2c8b4d85\",\"web_nuxt3_05_learn01.md\":\"be7f2116\",\"web_nuxt3_05_learn02.md\":\"cc1f7467\",\"web_nuxt3_05_learn03.md\":\"13fc3eb1\",\"web_react_01_learn01.md\":\"5c6bdd83\",\"web_react_01_learn02.md\":\"47f7eef9\",\"web_react_01_learn03.md\":\"933b75f8\",\"web_react_01_learn04.md\":\"9ad864e5\",\"web_react_01_learn05.md\":\"2ed01344\",\"web_react_01_learn06.md\":\"af1af381\",\"web_react_03_learn01.md\":\"a8bb7a1b\",\"web_react_02_learn01.md\":\"ec1f531d\",\"web_react_04_learn01.md\":\"4a742238\",\"web_react_01_learn07.md\":\"7b8d820c\",\"web_react_05_learn01.md\":\"dff53736\",\"web_react_05_learn02.md\":\"7faa96b5\",\"web_react_05_learn03.md\":\"dbac9935\",\"web_react_05_learn04.md\":\"49f1a60c\",\"web_react_05_learn05.md\":\"ecf18497\",\"web_react_05_learn06.md\":\"9f082023\",\"web_react_05_learn07.md\":\"5a6bdbbf\",\"web_react_05_learn08.md\":\"20ee9801\",\"web_react_05_learn09.md\":\"cf842354\",\"web_react_05_learn10.md\":\"a84f17f3\",\"web_react_05_learn11.md\":\"f2f2cc46\",\"web_react_05_learn12.md\":\"c71ceb8d\",\"web_react_05_learn13.md\":\"7780636e\",\"web_react_05_learn14.md\":\"68ed1e1d\",\"web_react_05_learn17.md\":\"c3432bb6\",\"web_react_05_learn16.md\":\"70c399ca\",\"web_react_05_learn18.md\":\"261f269b\",\"web_react_05_learn20.md\":\"e7801f11\",\"web_react_05_learn15.md\":\"974a98ac\",\"web_react_05_learn19.md\":\"47c5beea\",\"web_react_10_learn01.md\":\"935bfaee\",\"web_react_06_learn02.md\":\"01be4891\",\"web_react_09_learn03.md\":\"08fa6271\",\"web_react_07_learn01.md\":\"29f2f337\",\"web_react_07_learn02.md\":\"ce0d9a16\",\"web_react_09_learn04.md\":\"15ae7e28\",\"web_react_09_learn01.md\":\"987aa5a1\",\"web_react_11_learn02.md\":\"3748cedf\",\"web_react_08_learn01.md\":\"53bd602b\",\"web_react_11_learn01.md\":\"37fe9111\",\"web_react_09_learn02.md\":\"f87c507b\",\"web_react_06_learn01.md\":\"1641040d\",\"web_react_13_learn01.md\":\"b436cd63\",\"web_react_12_learn01.md\":\"1fd95aeb\",\"web_react_11_learn03.md\":\"75f8874c\",\"web_vue2_01_learn01.md\":\"9d391eaf\",\"web_react_15_learn01.md\":\"d9583687\",\"web_react_15_learn02.md\":\"05c63fab\",\"web_vue2_01_learn02.md\":\"0a74ccbb\",\"web_vue2_01_learn03.md\":\"d607dbf6\",\"web_react_14_learn01.md\":\"bed15afa\",\"web_vue2_02_learn01.md\":\"f4dc2209\",\"web_vue2_01_learn05.md\":\"5c8d4172\",\"web_vue2_01_learn06.md\":\"96effce5\",\"web_vue2_01_learn04.md\":\"eb8e1bd9\",\"web_vue2_02_learn02.md\":\"3877d4ed\",\"web_vue2_02_learn07.md\":\"a055c961\",\"web_vue2_02_learn05.md\":\"cce18aad\",\"web_vue2_02_learn04.md\":\"905d9901\",\"web_vue2_03_learn01.md\":\"9f11b4a0\",\"web_vue2_02_learn06.md\":\"4a0fcaed\",\"web_vue2_02_learn03.md\":\"185ecac6\",\"web_vue2_02_learn09.md\":\"5178083c\",\"web_vue2_02_learn10.md\":\"87336e03\",\"web_vue2_02_learn08.md\":\"7dc37766\",\"web_vue2_03_learn04.md\":\"1e16efbc\",\"web_vue2_03_learn02.md\":\"e6c1fa09\",\"web_vue2_03_learn03.md\":\"ceae501d\",\"web_vue2_04_learn01.md\":\"8c54fd83\",\"web_vue2_05_learn01.md\":\"3169061e\",\"web_vue2_04_learn03.md\":\"0ca42ac5\",\"web_vue2_05_learn02.md\":\"304e2941\",\"web_vue2_04_learn02.md\":\"622c33d8\",\"web_vue2_05_learn03.md\":\"5979941e\",\"web_vue2_06_learn04.md\":\"64cea819\",\"web_vue2_06_learn02.md\":\"b634d59a\",\"web_vue2_06_learn05.md\":\"ee19cbfb\",\"web_vue2_06_learn03.md\":\"c1fd8196\",\"web_vue2_06_learn01.md\":\"1e52942e\",\"web_vue3_01_learn01.md\":\"82114093\",\"web_vue3_01_learn02.md\":\"d571309c\",\"web_vue3_01_learn04.md\":\"15f2d70e\",\"web_vue3_02_learn01.md\":\"c9d2f88d\",\"web_vue3_01_learn03.md\":\"3df60f72\",\"web_vue3_03_learn01.md\":\"3f3e17ff\",\"web_vue3_03_learn02.md\":\"2896b97e\",\"web_vue3_02_learn02.md\":\"2afe7860\",\"web_vue3_04_learn01.md\":\"108d149d\",\"web_vue3_02_learn03.md\":\"52d95fa1\",\"web_vue3_04_learn02.md\":\"1648f04f\",\"web_vue3_04_learn03.md\":\"c0ecea8f\",\"web_vue3_05_learn01.md\":\"ab316a81\",\"web_vue3_04_learn04.md\":\"bc98d39e\",\"web_vue3_05_learn02.md\":\"0ed1e38f\",\"web_vue3_05_learn04.md\":\"72f14eec\",\"web_vue3_05_learn03.md\":\"bc3eb3ef\",\"web_vue3_06_learn01.md\":\"47e43ea2\",\"web_vue3_08_learn02.md\":\"1b8b9db4\",\"web_vue3_08_learn01.md\":\"5d12764d\",\"web_vue3_07_learn01.md\":\"128c70d7\",\"web_vue3_08_learn03.md\":\"57e4f4bb\",\"web_vue3_08_learn05.md\":\"f8d0e1a9\",\"web_vue3_09_learn01.md\":\"f1681401\",\"web_vue3_08_learn04.md\":\"c125dc9b\",\"web_vue3_10_learn01.md\":\"973e7a22\",\"web_vue3_10_learn02.md\":\"7c28883c\",\"web_vue3_10_learn04.md\":\"cf850441\",\"web_vue3_10_learn03.md\":\"39786c19\",\"web_wechatcloud_01_learn01.md\":\"c0cb77c6\",\"web_vue3_10_learn05.md\":\"cf075dec\",\"web_vue3_09_learn02.md\":\"eeb4260d\",\"web_vue3_10_learn06.md\":\"b11efb72\",\"web_wechatcloud_01_learn03.md\":\"67fe320c\",\"web_wechatcloud_01_learn02.md\":\"c648b2aa\",\"web_wechatcloud_02_learn01.md\":\"a46b0864\",\"web_wechatcloud_02_learn03.md\":\"2ddc8141\",\"workflow_css_spec.md\":\"55fbec8c\",\"web_wechatcloud_01_learn04.md\":\"6c04db91\",\"web_wechatcloud_02_learn02.md\":\"b171bac6\",\"web_wechatcloud_03_learn01.md\":\"9fc1ac64\",\"workflow_elementui_learn01.md\":\"a1bcd127\",\"workflow_css_tricks.md\":\"a9fa02fa\",\"workflow_node_npm.md\":\"103cf0c6\",\"workflow_git_learn01.md\":\"ff359afd\",\"workflow_git_learn02.md\":\"507f5149\",\"workflow_css_svg.md\":\"dca1daac\",\"workflow_node_nvm.md\":\"13dc221b\",\"workflow_terminal_learn01.md\":\"1364b976\",\"workflow_terminal_learn02.md\":\"80e2ebd7\",\"workflow_terminal_shell.md\":\"de574807\",\"workflow_sass_index.md\":\"f4757f43\",\"workflow_terminal_toolkit.md\":\"46798207\",\"workflow_terminal_zsh.md\":\"b2e1938e\",\"workflow_utils_library.md\":\"4c2486a6\",\"workflow_utils_regexp.md\":\"0130508f\",\"workflow_utils_function.md\":\"abb59169\",\"workflow_vite_learn03.md\":\"edbe71ab\",\"workflow_vite_learn02.md\":\"890073b5\",\"workflow_vue_index.md\":\"31088bc4\",\"workflow_vite_learn01.md\":\"a4fddb0a\",\"dailynotes_03_learn02.md\":\"e485b2dd\"}")
__VP_SITE_DATA__ = JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"烟浮YanFu\",\"description\":\"烟浮YanFu的成长之路，包含前端常用知识、源码阅读笔记、各种奇淫技巧、日常提效工具等\",\"base\":\"/yanfu_notes/\",\"head\":[],\"appearance\":true,\"themeConfig\":{\"logo\":\"/images/avatar.jpeg\",\"siteTitle\":\"烟浮YanFu\",\"i18nRouting\":false,\"nav\":[{\"text\":\"导航\",\"link\":\"/nav\",\"activeMatch\":\"^/nav\"},{\"text\":\"学习笔记\",\"items\":[{\"items\":[{\"text\":\"JavaScript 基础\",\"link\":\"/web/JavaScript/learn01\"},{\"text\":\"JavaScript 高级\",\"link\":\"/web/JavaScript_top/learn01\"}]},{\"items\":[{\"text\":\"Vue2\",\"link\":\"/web/vue2/01/learn01\"},{\"text\":\"Vue3\",\"link\":\"/web/vue3/01/learn01\"},{\"text\":\"pinia\",\"link\":\"/pinia/learn01\"},{\"text\":\"Nuxt3\",\"link\":\"/web/Nuxt3/01/learn01\"}]},{\"items\":[{\"text\":\"React\",\"link\":\"/web/react/01/learn01\"},{\"text\":\"Next\",\"link\":\"/web/Next/01/learn01\"}]},{\"items\":[{\"text\":\"Node\",\"link\":\"/web/NodeLearn/01/learn01\"},{\"text\":\"Docker\",\"link\":\"/web/Dockers/01/learn01\"}]},{\"items\":[{\"text\":\"微信小程序\",\"link\":\"/web/wechatCloud/01/learn01\"}]}],\"activeMatch\":\"^/web\"},{\"text\":\"日常笔记\",\"activeMatch\":\"^/dailyNotes\",\"items\":[{\"text\":\"JavaScript 相关\",\"items\":[{\"text\":\"优雅的 JavaScript 单行代码\",\"link\":\"/dailyNotes/01/learn01\"},{\"text\":\"Array 下有多少原型方法\",\"link\":\"/dailyNotes/01/learn02\"},{\"text\":\"正则相关\",\"link\":\"/dailyNotes/01/learn03\"}]},{\"text\":\"Vue 相关\",\"items\":[{\"text\":\"使用 defer 优化白屏时间\",\"link\":\"/dailyNotes/02/learn01\"}]},{\"text\":\"css 相关\",\"items\":[{\"text\":\"loading\",\"link\":\"/dailyNotes/03/learn01\"}]}]},{\"text\":\"源码学习\",\"link\":\"/web/vue3/06/learn01\",\"activeMatch\":\"^/web/vue3/\"},{\"text\":\"Workflow\",\"items\":[{\"text\":\"常用工具/方法\",\"items\":[{\"text\":\"工具库整理\",\"link\":\"/workflow/utils/library\"},{\"text\":\"常用正则整理\",\"link\":\"/workflow/utils/regexp\"},{\"text\":\"常用方法整理\",\"link\":\"/workflow/utils/function\"}]},{\"text\":\"CSS 相关\",\"items\":[{\"text\":\"CSS 语法\",\"link\":\"/workflow/css/spec\"},{\"text\":\"CSS 奇淫技巧\",\"link\":\"/workflow/css/tricks\"},{\"text\":\"Sass 常用技巧\",\"link\":\"/workflow/sass/\"}]},{\"text\":\"element-ui 相关\",\"items\":[{\"text\":\"切换主题\",\"link\":\"/workflow/elementUI/learn01\"}]},{\"text\":\"Vue 小技巧\",\"link\":\"/workflow/vue/\"},{\"text\":\"Vite 相关\",\"link\":\"/workflow/vite/learn01\"},{\"text\":\"node 相关\",\"link\":\"/workflow/node/npm\"},{\"text\":\"终端相关\",\"items\":[{\"text\":\"Zsh 配置\",\"link\":\"/workflow/terminal/zsh\"},{\"text\":\"命令行工具\",\"link\":\"/workflow/terminal/toolkit\"},{\"text\":\"Shell 命令\",\"link\":\"/workflow/terminal/shell\"}]},{\"text\":\"Git 相关\",\"link\":\"/workflow/git/learn01\"}],\"activeMatch\":\"^/workflow\"},{\"text\":\"踩坑记录\",\"link\":\"/pit/npm\",\"activeMatch\":\"^/pit\"},{\"text\":\"提效工具\",\"items\":[{\"text\":\"软件推荐与配置\",\"items\":[{\"text\":\"多平台软件\",\"link\":\"/efficiency/software/cross-platform\"},{\"text\":\"Mac 平台\",\"link\":\"/efficiency/software/mac\"},{\"text\":\"Windows 平台\",\"link\":\"/efficiency/software/windows\"},{\"text\":\"浏览器设置与扩展\",\"link\":\"/efficiency/software/browser\"},{\"text\":\"Visual Studio Code 配置\",\"link\":\"/efficiency/software/vscode\"},{\"text\":\"WebStorm 配置\",\"link\":\"/efficiency/software/webstorm\"}]},{\"text\":\"在线工具\",\"link\":\"/efficiency/online-tools\"},{\"text\":\"书签脚本\",\"link\":\"/efficiency/bookmark-scripts\"}],\"activeMatch\":\"^/efficiency\"},{\"text\":\"烟浮YanFu\",\"link\":\"https://gitee.com/addminsjh\"}],\"sidebar\":{\"/web/JavaScript/\":[{\"text\":\"JavaScript 基础\",\"items\":[{\"text\":\"JS DOM--什么是DOM\",\"link\":\"/web/JavaScript/learn01\"},{\"text\":\"JS DOM--查找元素\",\"link\":\"/web/JavaScript/learn02\"},{\"text\":\"JS DOM--父、子和兄弟元素\",\"link\":\"/web/JavaScript/learn03\"},{\"text\":\"JS DOM--创建元素、插入元素\",\"link\":\"/web/JavaScript/learn04\"},{\"text\":\"JS DOM--appendChild、textContent、innerText、innerHTML\",\"link\":\"/web/JavaScript/learn05\"},{\"text\":\"innerHTML vs createElement\",\"link\":\"/web/JavaScript/learn06\"},{\"text\":\"insertBefore、insertAfter、append、prepend\",\"link\":\"/web/JavaScript/learn07\"},{\"text\":\"replaceChild、cloneNode、removeChild\",\"link\":\"/web/JavaScript/learn08\"},{\"text\":\"insertAdjacentHTML\",\"link\":\"/web/JavaScript/learn09\"},{\"text\":\"属性操作\",\"link\":\"/web/JavaScript/learn10\"},{\"text\":\"操作style样式、class、getComputedStyle\",\"link\":\"/web/JavaScript/learn11\"},{\"text\":\"事件初识\",\"link\":\"/web/JavaScript/learn12\"},{\"text\":\"三种事件绑定方式\",\"link\":\"/web/JavaScript/learn13\"},{\"text\":\"DOMContentLoaded、load、beforeunload 和 unload\",\"link\":\"/web/JavaScript/learn14\"},{\"text\":\"详解load事件\",\"link\":\"/web/JavaScript/learn15\"},{\"text\":\"详解鼠标事件\",\"link\":\"/web/JavaScript/learn16\"},{\"text\":\"键盘事件\",\"link\":\"/web/JavaScript/learn17\"},{\"text\":\"滚动事件\",\"link\":\"/web/JavaScript/learn18\"},{\"text\":\"scrollIntoView()\",\"link\":\"/web/JavaScript/learn19\"},{\"text\":\"理解事件委托\",\"link\":\"/web/JavaScript/learn20\"},{\"text\":\"dispatchEvent()\",\"link\":\"/web/JavaScript/learn21\"},{\"text\":\"自定义事件\",\"link\":\"/web/JavaScript/learn22\"},{\"text\":\"MutationObserver是干什么的\",\"link\":\"/web/JavaScript/learn23\"},{\"text\":\"原生表单\",\"link\":\"/web/JavaScript/learn24\"}]}],\"/web/JavaScript_top/\":[{\"text\":\"JavaScript 高级\",\"items\":[{\"text\":\"创建对象 7 种方式，原型链，call/apply/bind\",\"link\":\"/web/JavaScript_top/learn01\"},{\"text\":\"数组slice和splice怎么使用-区别？\",\"link\":\"/web/JavaScript_top/learn02\"},{\"text\":\"箭头函数，高阶函数，柯里化函数，纯函数\",\"link\":\"/web/JavaScript_top/learn03\"},{\"text\":\"==和===和Object.is()的区别\",\"link\":\"/web/JavaScript_top/learn04\"},{\"text\":\"JS手写从URL中获取指定参数-3种方式\",\"link\":\"/web/JavaScript_top/learn05\"},{\"text\":\"8个JS的reduce使用实例，和reduce的骚操作\",\"link\":\"/web/JavaScript_top/learn06\"},{\"text\":\"axios/fetch/XMLHttpRequest怎么取消请求\",\"link\":\"/web/JavaScript_top/learn07\"},{\"text\":\"用易懂的方式理解JS中new关键字\",\"link\":\"/web/JavaScript_top/learn08\"},{\"text\":\"4个超级实用JS小技巧 少写代码 提升开发效率\",\"link\":\"/web/JavaScript_top/learn09\"},{\"text\":\"JavaScript Proxy学习笔记-1\",\"link\":\"/web/JavaScript_top/learn10\"},{\"text\":\"JavaScript Proxy学习笔记-2\",\"link\":\"/web/JavaScript_top/learn11\"},{\"text\":\"JavaScript Promise学习笔记-1\",\"link\":\"/web/JavaScript_top/learn12\"},{\"text\":\"JavaScript Promise链式调用-2\",\"link\":\"/web/JavaScript_top/learn13\"},{\"text\":\"JavaScript Promise.all()\",\"link\":\"/web/JavaScript_top/learn14\"},{\"text\":\"JavaScript Promise.race()\",\"link\":\"/web/JavaScript_top/learn15\"},{\"text\":\"JavaScript Promise的错误处理\",\"link\":\"/web/JavaScript_top/learn16\"},{\"text\":\"ES6新数据类型 Set\",\"link\":\"/web/JavaScript_top/learn17\"},{\"text\":\"ES6新数据类型 Map\",\"link\":\"/web/JavaScript_top/learn18\"},{\"text\":\"全面理解ES6模块化编程\",\"link\":\"/web/JavaScript_top/learn19\"},{\"text\":\"JavaScript ES6 Symbol\",\"link\":\"/web/JavaScript_top/learn20\"},{\"text\":\"JavaScript数组迭代方法\",\"link\":\"/web/JavaScript_top/learn21\"},{\"text\":\"JavaScript String原生方法\",\"link\":\"/web/JavaScript_top/learn22\"},{\"text\":\"数组查找项\",\"link\":\"/web/JavaScript_top/learn23\"},{\"text\":\"ES6-ES12\",\"link\":\"/web/JavaScript_top/learn24\"},{\"text\":\"ES6 常用知识\",\"link\":\"/web/JavaScript_top/learn25\"}]}],\"/web/vue2/\":[{\"text\":\"Vue2\",\"items\":[{\"text\":\"前端工程化与 webpack\",\"collapsed\":true,\"items\":[{\"text\":\"前端工程化\",\"link\":\"/web/vue2/01/learn01\"},{\"text\":\"webpack 的基本使用\",\"link\":\"/web/vue2/01/learn02\"},{\"text\":\"webpack 插件的作用\",\"link\":\"/web/vue2/01/learn03\"},{\"text\":\"webpack 中的 loader\",\"link\":\"/web/vue2/01/learn04\"},{\"text\":\"打包发布\",\"link\":\"/web/vue2/01/learn05\"},{\"text\":\"Source Map\",\"link\":\"/web/vue2/01/learn06\"}]},{\"text\":\"基础入门\",\"collapsed\":true,\"items\":[{\"text\":\"Vue 的基本使用\",\"link\":\"/web/vue2/02/learn01\"},{\"text\":\"Vue 的调试工具\",\"link\":\"/web/vue2/02/learn02\"},{\"text\":\"Vue 的指令与过滤器\",\"link\":\"/web/vue2/02/learn03\"},{\"text\":\"品牌列表案例\",\"link\":\"/web/vue2/02/learn04\"},{\"text\":\"侦听器\",\"link\":\"/web/vue2/02/learn05\"},{\"text\":\"计算属性\",\"link\":\"/web/vue2/02/learn06\"},{\"text\":\"Vue-cli\",\"link\":\"/web/vue2/02/learn07\"},{\"text\":\"Vue 组件\",\"link\":\"/web/vue2/02/learn08\"},{\"text\":\"axios\",\"link\":\"/web/vue2/02/learn09\"},{\"text\":\"计算属补充性\",\"link\":\"/web/vue2/02/learn10\"}]},{\"text\":\"生命周期 & 数据共享\",\"collapsed\":true,\"items\":[{\"text\":\"组件的生命周期\",\"link\":\"/web/vue2/03/learn01\"},{\"text\":\"组件之间的数据共享\",\"link\":\"/web/vue2/03/learn02\"},{\"text\":\"ref 引用\",\"link\":\"/web/vue2/03/learn03\"},{\"text\":\"总结\",\"link\":\"/web/vue2/03/learn04\"}]},{\"text\":\"动态组件/插槽/自定义指令\",\"collapsed\":true,\"items\":[{\"text\":\"动态组件\",\"link\":\"/web/vue2/04/learn01\"},{\"text\":\"插槽\",\"link\":\"/web/vue2/04/learn02\"},{\"text\":\"自定义指令\",\"link\":\"/web/vue2/04/learn03\"}]},{\"text\":\"路由\",\"collapsed\":true,\"items\":[{\"text\":\"前端路由的概念与原理\",\"link\":\"/web/vue2/05/learn01\"},{\"text\":\"vue-router 的基本使用\",\"link\":\"/web/vue2/05/learn02\"},{\"text\":\"vue-router 的常见用法\",\"link\":\"/web/vue2/05/learn03\"}]},{\"text\":\"打包相关\",\"collapsed\":true,\"items\":[{\"text\":\"Token 续签\",\"link\":\"/web/vue2/06/learn01\"},{\"text\":\"项目优化\",\"link\":\"/web/vue2/06/learn02\"},{\"text\":\"打包发布\",\"link\":\"/web/vue2/06/learn03\"},{\"text\":\"vant 修改主题\",\"link\":\"/web/vue2/06/learn04\"},{\"text\":\"APP滚动停留保持位置\",\"link\":\"/web/vue2/06/learn05\"}]}]}],\"/web/vue3/\":[{\"text\":\"Vue3\",\"items\":[{\"text\":\"Vue3开发体验\",\"collapsed\":true,\"items\":[{\"text\":\"Vue3开发\",\"link\":\"/web/vue3/01/learn01\"},{\"text\":\"Vue基础-模板语法\",\"link\":\"/web/vue3/01/learn02\"},{\"text\":\"Options-API\",\"link\":\"/web/vue3/01/learn03\"},{\"text\":\"Vue3 开发模式\",\"link\":\"/web/vue3/01/learn04\"}]},{\"text\":\"Webpack基础\",\"collapsed\":true,\"items\":[{\"text\":\"Webpack基础打包\",\"link\":\"/web/vue3/02/learn01\"},{\"text\":\"Webpack打包其他资源\",\"link\":\"/web/vue3/02/learn02\"},{\"text\":\"Babel和devServer\",\"link\":\"/web/vue3/02/learn03\"}]},{\"text\":\"VueCLI和Vite\",\"collapsed\":true,\"items\":[{\"text\":\"VueCLI\",\"link\":\"/web/vue3/03/learn01\"},{\"text\":\"Vite\",\"link\":\"/web/vue3/03/learn02\"}]},{\"text\":\"Vue3组件化开发\",\"collapsed\":true,\"items\":[{\"text\":\"Vue3组件化开发一\",\"link\":\"/web/vue3/04/learn01\"},{\"text\":\"Vue3组件化开发二\",\"link\":\"/web/vue3/04/learn02\"},{\"text\":\"Vue3组件化开发三\",\"link\":\"/web/vue3/04/learn03\"},{\"text\":\"Vue3过渡&动画实现\",\"link\":\"/web/vue3/04/learn04\"}]},{\"text\":\"Composition API\",\"collapsed\":true,\"items\":[{\"text\":\"Composition API(一)\",\"link\":\"/web/vue3/05/learn01\"},{\"text\":\"Composition API(二)\",\"link\":\"/web/vue3/05/learn02\"},{\"text\":\"Composition API(三)\",\"link\":\"/web/vue3/05/learn03\"},{\"text\":\"Vue3高级语法补充\",\"link\":\"/web/vue3/05/learn04\"}]},{\"text\":\"Vue3源码学习\",\"collapsed\":true,\"items\":[{\"text\":\"Vue3源码学习\",\"link\":\"/web/vue3/06/learn01\"}]},{\"text\":\"VueX\",\"collapsed\":true,\"items\":[{\"text\":\"Vuex的状态管理\",\"link\":\"/web/vue3/07/learn01\"}]},{\"text\":\"TypeScript\",\"collapsed\":true,\"items\":[{\"text\":\"TypeScript语法精讲(一)\",\"link\":\"/web/vue3/08/learn01\"},{\"text\":\"webpack 下搭建 TypeScript 运行环境\",\"link\":\"/web/vue3/08/learn02\"},{\"text\":\"TypeScript语法精讲(二)\",\"link\":\"/web/vue3/08/learn03\"},{\"text\":\"TypeScript语法精讲(三)\",\"link\":\"/web/vue3/08/learn04\"},{\"text\":\"TypeScript语法精讲(四)\",\"link\":\"/web/vue3/08/learn05\"}]},{\"text\":\"高阶组件封装\",\"collapsed\":true,\"items\":[{\"text\":\"网络请求封装\",\"link\":\"/web/vue3/09/learn01\"},{\"text\":\"自定义form表单高阶组件\",\"link\":\"/web/vue3/09/learn02\"}]},{\"text\":\"其他问题解决\",\"collapsed\":true,\"items\":[{\"text\":\"项目页面初始化\",\"link\":\"/web/vue3/10/learn01\"},{\"text\":\"element-plus 相关\",\"link\":\"/web/vue3/10/learn02\"},{\"text\":\"tsconfig.json 基本配置\",\"link\":\"/web/vue3/10/learn03\"},{\"text\":\"tsconfig.node.json 报错\",\"link\":\"/web/vue3/10/learn04\"},{\"text\":\"vue3+vite项目适配rem\",\"link\":\"/web/vue3/10/learn05\"},{\"text\":\"vue3 响应式移动端\",\"link\":\"/web/vue3/10/learn06\"}]}]}],\"/pinia/\":[{\"text\":\"pinia\",\"items\":[{\"text\":\"pinia\",\"link\":\"/pinia/learn01\"},{\"text\":\"Nuxt3 集成 Pinia\",\"link\":\"/web/Nuxt3/04/learn07\"}]}],\"/web/react/\":[{\"text\":\"React\",\"items\":[{\"text\":\"React 初体验\",\"collapsed\":true,\"items\":[{\"text\":\"初体验 React\",\"link\":\"/web/react/01/learn01\"},{\"text\":\"jsx绑定属性\",\"link\":\"/web/react/01/learn02\"},{\"text\":\"jsx绑定事件、传递参数\",\"link\":\"/web/react/01/learn03\"},{\"text\":\"React 条件渲染\",\"link\":\"/web/react/01/learn04\"},{\"text\":\"React 列表渲染\",\"link\":\"/web/react/01/learn05\"},{\"text\":\"jsx 的本质\",\"link\":\"/web/react/01/learn06\"},{\"text\":\"阶段性案例-购物车\",\"link\":\"/web/react/01/learn07\"}]},{\"text\":\"脚手架\",\"link\":\"/web/react/02/learn01\"},{\"text\":\"render函数\",\"link\":\"/web/react/03/learn01\"},{\"text\":\"认识生命周期\",\"link\":\"/web/react/04/learn01\"},{\"text\":\"组件化开发\",\"collapsed\":true,\"items\":[{\"text\":\"组件化开发\",\"link\":\"/web/react/05/learn01\"},{\"text\":\"父传子通信\",\"link\":\"/web/react/05/learn02\"},{\"text\":\"参数验证 propTypes\",\"link\":\"/web/react/05/learn03\"},{\"text\":\"子传父\",\"link\":\"/web/react/05/learn04\"},{\"text\":\"组件通信案例练习\",\"link\":\"/web/react/05/learn05\"},{\"text\":\"React 实现插槽slot\",\"link\":\"/web/react/05/learn06\"},{\"text\":\"跨组件通信\",\"link\":\"/web/react/05/learn07\"},{\"text\":\"为什么使用 setState\",\"link\":\"/web/react/05/learn08\"},{\"text\":\"React 更新机制\",\"link\":\"/web/react/05/learn09\"},{\"text\":\"setState 不可变数据的力量\",\"link\":\"/web/react/05/learn10\"},{\"text\":\"全局事件传递\",\"link\":\"/web/react/05/learn11\"},{\"text\":\"ref 的使用\",\"link\":\"/web/react/05/learn12\"},{\"text\":\"ref 的类型(受控和非受控组件)\",\"link\":\"/web/react/05/learn13\"},{\"text\":\"认识高阶函数\",\"link\":\"/web/react/05/learn14\"},{\"text\":\"应用一 - props的增强\",\"link\":\"/web/react/05/learn15\"},{\"text\":\"应用二 - 渲染判断鉴权\",\"link\":\"/web/react/05/learn16\"},{\"text\":\"ref 的转发\",\"link\":\"/web/react/05/learn17\"},{\"text\":\"Porals 的使用\",\"link\":\"/web/react/05/learn18\"},{\"text\":\"Fragments\",\"link\":\"/web/react/05/learn19\"},{\"text\":\"StrictMode 严格模式\",\"link\":\"/web/react/05/learn20\"}]},{\"text\":\"React 中的样式\",\"collapsed\":true,\"items\":[{\"text\":\"认识CSS in JS\",\"link\":\"/web/react/06/learn01\"},{\"text\":\"React 中添加 class\",\"link\":\"/web/react/06/learn02\"}]},{\"text\":\"AntDesign 组件库\",\"collapsed\":true,\"items\":[{\"text\":\"AntDesign的介绍\",\"link\":\"/web/react/07/learn01\"},{\"text\":\"认识 craco\",\"link\":\"/web/react/07/learn02\"}]},{\"text\":\"React-Transition-Group\",\"link\":\"/web/react/08/learn01\"},{\"text\":\"Redux的使用\",\"collapsed\":true,\"items\":[{\"text\":\"JavaScript 纯函数\",\"link\":\"/web/react/09/learn01\"},{\"text\":\"React中的纯函数\",\"link\":\"/web/react/09/learn02\"},{\"text\":\"为什么需要 redux\",\"link\":\"/web/react/09/learn03\"},{\"text\":\"redux-thunk发送异步请求\",\"link\":\"/web/react/09/learn04\"}]},{\"text\":\"react-router\",\"link\":\"/web/react/10/learn01\"},{\"text\":\"React Hooks\",\"collapsed\":true,\"items\":[{\"text\":\"为什么需要Hook\",\"link\":\"/web/react/11/learn01\"},{\"text\":\"React中的纯函数\",\"link\":\"/web/react/11/learn02\"},{\"text\":\"useReducer 等Hook\",\"link\":\"/web/react/11/learn03\"}]},{\"text\":\"项目规范\",\"link\":\"/web/react/12/learn01\"},{\"text\":\"认识ImmutableJS\",\"link\":\"/web/react/13/learn01\"},{\"text\":\"redux 项目中的使用\",\"link\":\"/web/react/14/learn01\"},{\"text\":\"React SSR\",\"collapsed\":true,\"items\":[{\"text\":\"认识SSR\",\"link\":\"/web/react/15/learn01\"},{\"text\":\"使用React SSR\",\"link\":\"/web/react/15/learn02\"}]}]}],\"/web/Nuxt3/\":[{\"text\":\"Nuxt3\",\"items\":[{\"text\":\"Nuxt初体验\",\"collapsed\":true,\"items\":[{\"text\":\"单页面应用程序渲染原理\",\"link\":\"/web/Nuxt3/01/learn01\"},{\"text\":\"SPA 的有缺点\",\"link\":\"/web/Nuxt3/01/learn02\"},{\"text\":\"爬虫-工作流程\",\"link\":\"/web/Nuxt3/01/learn03\"},{\"text\":\"搜索引擎的优化(SEO)\",\"link\":\"/web/Nuxt3/01/learn04\"},{\"text\":\"静态站点生成(SSG)\",\"link\":\"/web/Nuxt3/01/learn05\"},{\"text\":\"服务器端渲染(SSR)\",\"link\":\"/web/Nuxt3/01/learn06\"},{\"text\":\"SSR 优缺点\",\"link\":\"/web/Nuxt3/01/learn07\"}]},{\"text\":\"Vue3 + SSR\",\"collapsed\":true,\"items\":[{\"text\":\"邂逅Vue3 + SSR\",\"link\":\"/web/Nuxt3/02/learn01\"},{\"text\":\"Node Server 搭建\",\"link\":\"/web/Nuxt3/02/learn02\"},{\"text\":\"Vue3 + SSR 搭建\",\"link\":\"/web/Nuxt3/02/learn03\"},{\"text\":\"Vue3 SSR + Hydration\",\"link\":\"/web/Nuxt3/02/learn04\"},{\"text\":\"跨请求状态污染\",\"link\":\"/web/Nuxt3/02/learn05\"},{\"text\":\"Vue3 SSR + Vue Router\",\"link\":\"/web/Nuxt3/02/learn06\"},{\"text\":\"Vue3 SSR + Pinia\",\"link\":\"/web/Nuxt3/02/learn07\"}]},{\"text\":\"Vue3 + Nuxt3 基础语法\",\"collapsed\":true,\"items\":[{\"text\":\"邂逅 Nuxt3\",\"link\":\"/web/Nuxt3/03/learn01\"},{\"text\":\"Nuxt3 初体验\",\"link\":\"/web/Nuxt3/03/learn02\"},{\"text\":\"Nuxt3 全局配置\",\"link\":\"/web/Nuxt3/03/learn03\"},{\"text\":\"Nuxt3 内置组件\",\"link\":\"/web/Nuxt3/03/learn04\"},{\"text\":\"Nuxt3 样式和资源\",\"link\":\"/web/Nuxt3/03/learn05\"},{\"text\":\"Nuxt3 页面和导航\",\"link\":\"/web/Nuxt3/03/learn06\"},{\"text\":\"Nuxt3 动态路由\",\"link\":\"/web/Nuxt3/03/learn07\"}]},{\"text\":\"Vue3 + Nuxt3 核心语法\",\"collapsed\":true,\"items\":[{\"text\":\"嵌套路由和中间件\",\"link\":\"/web/Nuxt3/04/learn01\"},{\"text\":\"Nuxt 自定义布局\",\"link\":\"/web/Nuxt3/04/learn02\"},{\"text\":\"页面渲染模式\",\"link\":\"/web/Nuxt3/04/learn03\"},{\"text\":\"Nuxt3 插件开发\",\"link\":\"/web/Nuxt3/04/learn04\"},{\"text\":\"Lifecycle Hooks\",\"link\":\"/web/Nuxt3/04/learn05\"},{\"text\":\"获取数据、API 接口\",\"link\":\"/web/Nuxt3/04/learn06\"},{\"text\":\"useState 和 Pinia\",\"link\":\"/web/Nuxt3/04/learn07\"},{\"text\":\"安装 Element plus\",\"link\":\"/web/Nuxt3/04/learn08\"}]},{\"text\":\"打包部署\",\"collapsed\":true,\"items\":[{\"text\":\"项目\",\"link\":\"/web/Nuxt3/05/learn01\"},{\"text\":\"安装 Node 和 PM2\",\"link\":\"/web/Nuxt3/05/learn02\"},{\"text\":\"Nuxt3 配置 tailwindcss daisyui\",\"link\":\"/web/Nuxt3/05/learn03\"}]}]}],\"/web/Next/\":[{\"text\":\"Next\",\"items\":[{\"text\":\"从零搭建SSR应用\",\"collapsed\":true,\"items\":[{\"text\":\"React18 + SSR\",\"link\":\"/web/Next/01/learn01\"}]},{\"text\":\"React18 Next 基础语法\",\"collapsed\":true,\"items\":[{\"text\":\"Next.js\",\"link\":\"/web/Next/02/learn01\"},{\"text\":\"Next.js 初体验\",\"link\":\"/web/Next/02/learn02\"},{\"text\":\"全局配置\",\"link\":\"/web/Next/02/learn03\"},{\"text\":\"内置组件\",\"link\":\"/web/Next/02/learn04\"},{\"text\":\"样式和资源\",\"link\":\"/web/Next/02/learn05\"},{\"text\":\"页面和导航\",\"link\":\"/web/Next/02/learn06\"},{\"text\":\"动态路由\",\"link\":\"/web/Next/02/learn07\"}]},{\"text\":\"React18 Next 核心语法\",\"collapsed\":true,\"items\":[{\"text\":\"中间件和匹配器\",\"link\":\"/web/Next/03/learn01\"},{\"text\":\"Layout和生命周期\",\"link\":\"/web/Next/03/learn02\"},{\"text\":\"网络请求的封装\",\"link\":\"/web/Next/03/learn03\"},{\"text\":\"编写后端接口\",\"link\":\"/web/Next/03/learn04\"},{\"text\":\"页面渲染模式\",\"link\":\"/web/Next/03/learn05\"},{\"text\":\"数据获取和Redux\",\"link\":\"/web/Next/03/learn06\"}]},{\"text\":\"React18 Next 项目相关\",\"collapsed\":true,\"items\":[{\"text\":\"项目中用到的库\",\"link\":\"/web/Next/04/learn01\"},{\"text\":\"项目打包和部署\",\"link\":\"/web/Next/04/learn02\"}]}]}],\"/web/wechatCloud/\":[{\"text\":\"微信小程序\",\"items\":[{\"text\":\"微信小程序\",\"collapsed\":true,\"items\":[{\"text\":\"微信小程序其他内容\",\"link\":\"/web/wechatCloud/02/learn01\"},{\"text\":\"页面跳转传参\",\"link\":\"/web/wechatCloud/02/learn02\"},{\"text\":\"小程序登录解析\",\"link\":\"/web/wechatCloud/02/learn03\"}]},{\"text\":\"微信小程序云开发\",\"collapsed\":true,\"items\":[{\"text\":\"云开发核心技术\",\"link\":\"/web/wechatCloud/01/learn01\"},{\"text\":\"云数据库的增删改查\",\"link\":\"/web/wechatCloud/01/learn02\"},{\"text\":\"云存储的文件系统\",\"link\":\"/web/wechatCloud/01/learn03\"},{\"text\":\"云函数和云调用\",\"link\":\"/web/wechatCloud/01/learn04\"}]},{\"text\":\"微信小程序其他\",\"collapsed\":true,\"items\":[{\"text\":\"微信小程序共享数据\",\"link\":\"/web/wechatCloud/03/learn01\"}]}]}],\"/web/NodeLearn/\":[{\"text\":\"Node\",\"items\":[{\"text\":\"Node 服务器\",\"collapsed\":true,\"items\":[{\"text\":\"http 模块\",\"link\":\"/web/NodeLearn/01/learn01\"},{\"text\":\"http服务器-request对象解析\",\"link\":\"/web/NodeLearn/01/learn02\"},{\"text\":\"http服务器-response响应对象\",\"link\":\"/web/NodeLearn/01/learn03\"},{\"text\":\"http 请求\",\"link\":\"/web/NodeLearn/01/learn04\"},{\"text\":\"文件上传\",\"link\":\"/web/NodeLearn/01/learn05\"}]},{\"text\":\"Node 服务器 express 框架\",\"collapsed\":true,\"items\":[{\"text\":\"Express 认识初体验\",\"link\":\"/web/NodeLearn/02/learn01\"},{\"text\":\"Express 中间件使用\",\"link\":\"/web/NodeLearn/02/learn02\"},{\"text\":\"Express 请求和响应\",\"link\":\"/web/NodeLearn/02/learn03\"},{\"text\":\"Express 路由的使用\",\"link\":\"/web/NodeLearn/02/learn04\"},{\"text\":\"Express 的错误处理\",\"link\":\"/web/NodeLearn/02/learn05\"},{\"text\":\"Express 的源码解析\",\"link\":\"/web/NodeLearn/02/learn06\"},{\"text\":\"Express 静态资源服务器\",\"link\":\"/web/NodeLearn/02/learn07\"}]},{\"text\":\"Node 服务器 koa 框架\",\"collapsed\":true,\"items\":[{\"text\":\"koa 的基本使用\",\"link\":\"/web/NodeLearn/03/learn01\"},{\"text\":\"koa 的参数解析\",\"link\":\"/web/NodeLearn/03/learn02\"},{\"text\":\"koa 响应和错误\",\"link\":\"/web/NodeLearn/03/learn03\"},{\"text\":\"koa 静态服务器\",\"link\":\"/web/NodeLearn/03/learn04\"},{\"text\":\"和 express 对比\",\"link\":\"/web/NodeLearn/03/learn05\"}]},{\"text\":\"MySQL 数据库\",\"collapsed\":true,\"items\":[{\"text\":\"MySQL 介绍和安装\",\"link\":\"/web/NodeLearn/04/learn01\"},{\"text\":\"MySQL 链接和 GUI\",\"link\":\"/web/NodeLearn/04/learn02\"},{\"text\":\"SQL 语句和数据类型\",\"link\":\"/web/NodeLearn/04/learn03\"},{\"text\":\"SQL 语句-DDL 语句\",\"link\":\"/web/NodeLearn/04/learn04\"},{\"text\":\"SQL 语句-DML 语句\",\"link\":\"/web/NodeLearn/04/learn05\"},{\"text\":\"SQL 语句-DQL 语句\",\"link\":\"/web/NodeLearn/04/learn06\"},{\"text\":\"MySQL 数据库-高级特性\",\"link\":\"/web/NodeLearn/04/learn07\"},{\"text\":\"MySQL 查询对象\",\"link\":\"/web/NodeLearn/04/learn08\"},{\"text\":\"MySQL 查询数组\",\"link\":\"/web/NodeLearn/04/learn09\"}]},{\"text\":\"Node 中操作 MySQL\",\"collapsed\":true,\"items\":[{\"text\":\"mysql2 库介绍使用\",\"link\":\"/web/NodeLearn/05/learn01\"},{\"text\":\"mysql2 预处理语句\",\"link\":\"/web/NodeLearn/05/learn02\"},{\"text\":\"mysql2 连接池使用\",\"link\":\"/web/NodeLearn/05/learn03\"},{\"text\":\"mysql2 的 Promise\",\"link\":\"/web/NodeLearn/05/learn04\"}]},{\"text\":\"Node 项目实践\",\"collapsed\":true,\"items\":[{\"text\":\"项目搭建\",\"link\":\"/web/NodeLearn/06/learn01\"},{\"text\":\"JWT实现Token机制\",\"link\":\"/web/NodeLearn/06/learn02\"},{\"text\":\"图片上传和存储\",\"link\":\"/web/NodeLearn/06/learn03\"},{\"text\":\"配置云服务器\",\"link\":\"/web/NodeLearn/06/learn04\"}]},{\"text\":\"Node 项目中遇到的问题\",\"collapsed\":true,\"items\":[{\"text\":\"Nodejs——Mysql时区问题\",\"link\":\"/web/NodeLearn/07/learn01\"},{\"text\":\"apifox 设置 token\",\"link\":\"/web/NodeLearn/07/learn02\"},{\"text\":\"Node 内存不足\",\"link\":\"/web/NodeLearn/07/learn03\"}]}]}],\"/dailyNotes/\":[{\"text\":\"日常笔记\",\"items\":[{\"text\":\"JavaScript 相关\",\"collapsed\":true,\"items\":[{\"text\":\"10+个 JavaScript 单行代码\",\"link\":\"/dailyNotes/01/learn01\"},{\"text\":\"Array 下有多少原型方法\",\"link\":\"/dailyNotes/01/learn02\"},{\"text\":\"正则相关\",\"link\":\"/dailyNotes/01/learn03\"}]},{\"text\":\"Vue 相关\",\"collapsed\":true,\"items\":[{\"text\":\"使用 defer 优化白屏时间\",\"link\":\"/dailyNotes/02/learn01\"}]}]}],\"/dailyNotes/03/\":[{\"text\":\"css 相关\",\"items\":[{\"text\":\"loading\",\"collapsed\":true,\"items\":[{\"text\":\"纯css实现Loading效果（上）\",\"link\":\"/dailyNotes/03/learn01\"},{\"text\":\"纯css实现Loading效果（中）\",\"link\":\"/dailyNotes/03/learn02\"},{\"text\":\"纯css实现Loading效果（下）\",\"link\":\"/dailyNotes/03/learn03\"}]}]}],\"/workflow/\":[{\"text\":\"常用工具/方法\",\"collapsed\":false,\"items\":[{\"text\":\"工具库整理\",\"link\":\"/workflow/utils/library\"},{\"text\":\"常用正则整理\",\"link\":\"/workflow/utils/regexp\"},{\"text\":\"常用方法整理\",\"link\":\"/workflow/utils/function\"}]},{\"text\":\"CSS 相关\",\"collapsed\":false,\"items\":[{\"text\":\"CSS 语法\",\"link\":\"/workflow/css/spec\"},{\"text\":\"CSS 奇淫技巧\",\"link\":\"/workflow/css/tricks\"},{\"text\":\"Sass 常用技巧\",\"link\":\"/workflow/sass/\"},{\"text\":\"快速实现SVG动态图标\",\"link\":\"/workflow/css/svg\"}]},{\"text\":\"ElementUI 相关\",\"link\":\"/workflow/elementUI/learn01\"},{\"text\":\"Vue 相关\",\"link\":\"/workflow/vue/\"},{\"text\":\"Vite 相关\",\"items\":[{\"text\":\"Vite 配置-1\",\"link\":\"/workflow/vite/learn01\"},{\"text\":\"Vite 配置-2\",\"link\":\"/workflow/vite/learn02\"},{\"text\":\"src 配置\",\"link\":\"/workflow/vite/learn03\"}]},{\"text\":\"Node 相关\",\"items\":[{\"text\":\"npm 常用命令\",\"link\":\"/workflow/node/npm\"},{\"text\":\"nvm 常用命令\",\"link\":\"/workflow/node/nvm\"}]},{\"text\":\"终端相关\",\"collapsed\":false,\"items\":[{\"text\":\"Zsh 配置\",\"link\":\"/workflow/terminal/zsh\"},{\"text\":\"命令行工具\",\"link\":\"/workflow/terminal/toolkit\"},{\"text\":\"Shell 命令\",\"link\":\"/workflow/terminal/shell\"},{\"text\":\"iTerm2 mac 终端命令行工具\",\"link\":\"/workflow/terminal/learn01\"},{\"text\":\"oh-my-zsh 设置\",\"link\":\"/workflow/terminal/learn02\"}]},{\"text\":\"git\",\"collapsed\":false,\"items\":[{\"text\":\"Git 相关技巧\",\"link\":\"/workflow/git/learn01\"},{\"text\":\"Git 命令清单\",\"link\":\"/workflow/git/learn02\"}]}],\"/efficiency/\":[{\"text\":\"软件推荐与配置\",\"items\":[{\"text\":\"多平台软件\",\"link\":\"/efficiency/software/cross-platform\"},{\"text\":\"Mac 平台\",\"link\":\"/efficiency/software/mac\"},{\"text\":\"Windows 平台\",\"link\":\"/efficiency/software/windows\"},{\"text\":\"浏览器设置与扩展\",\"link\":\"/efficiency/software/browser\"},{\"text\":\"Visual Studio Code 配置\",\"link\":\"/efficiency/software/vscode\"},{\"text\":\"WebStorm 配置\",\"link\":\"/efficiency/software/webstorm\"}]},{\"text\":\"在线工具\",\"link\":\"/efficiency/online-tools\"},{\"text\":\"书签脚本\",\"link\":\"/efficiency/bookmark-scripts\"}],\"/pit/\":[{\"text\":\"踩坑记录\",\"items\":[{\"text\":\"npm 踩坑记录\",\"link\":\"/pit/npm\"},{\"text\":\"PC 踩坑记录\",\"link\":\"/pit/pc\"},{\"text\":\"H5 踩坑记录\",\"link\":\"/pit/h5\"},{\"text\":\"element-plus el-table 报错\",\"link\":\"/pit/element_plus\"}]}],\"/web/Dockers/\":[{\"text\":\"Docker\",\"items\":[{\"text\":\"Minio 对象存储\",\"collapsed\":true,\"items\":[{\"text\":\"Docker 相关\",\"link\":\"/web/Dockers/01/learn01\"}]},{\"text\":\"Minio 对象存储\",\"collapsed\":true,\"items\":[{\"text\":\"安装 Minio\",\"link\":\"/web/Dockers/02/learn01\"}]}]}]},\"outline\":{\"level\":\"deep\",\"label\":\"本页目录\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://gitee.com/addminsjh\"}],\"footer\":{\"message\":\"如有转载或 CV 的请标注本站原文地址\",\"copyright\":\"Copyright © 2023-present 烟浮YanFu\"},\"darkModeSwitchLabel\":\"外观\",\"returnToTopLabel\":\"返回顶部\",\"lastUpdatedText\":\"上次更新\",\"search\":{\"provider\":\"local\",\"options\":{\"translations\":{\"button\":{\"buttonText\":\"搜索文档\",\"buttonAriaLabel\":\"搜索文档\"},\"modal\":{\"noResultsText\":\"无法找到相关结果\",\"resetButtonTitle\":\"清除查询条件\",\"footer\":{\"selectText\":\"选择\",\"navigateText\":\"切换\",\"navigateUpKeyAriaLabel\":\"111\",\"closeText\":\"关闭\"}}}}},\"docFooter\":{\"prev\":\"上一篇\",\"next\":\"下一篇\"}},\"locales\":{},\"scrollOffset\":90,\"cleanUrls\":true}")</script>
    
  </body>
</html>